正则表达式总结

简介:
1、正则表达式的基本使用范例
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public  class Test {

     public  static  void main(String[] args) {
         //简单认识正则表达式的概念
        
        p( "abc".matches( "..."));
        p( "a8729a".replaceAll( "\\d""-"));
        Pattern p = Pattern.compile( "[a-z]{3}");
        Matcher m = p.matcher( "fgh");
        p(m.matches());
        p( "fgha".matches( "[a-z]{3}"));
        
        
         //初步认识. * + ?
        
        p( "a".matches( "."));
        p( "aa".matches( "aa"));
        p( "aaaa".matches( "a*"));
        p( "aaaa".matches( "a+"));
        p( "".matches("a*"));
        p( "aaaa".matches( "a?"));
        p( "".matches("a?"));
        p( "a".matches( "a?"));
        p( "214523145234532".matches( "\\d{3,100}"));
        p( "192.168.0.aaa".matches( "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
        p( "192".matches( "[0-2][0-9][0-9]"));
        
        
         //范围
        
        p( "a".matches( "[abc]"));
        p( "a".matches( "[^abc]"));
        p( "A".matches( "[a-zA-Z]"));
        p( "A".matches( "[a-z]|[A-Z]"));
        p( "A".matches( "[a-z[A-Z]]"));
        p( "R".matches( "[A-Z&&[RFG]]"));
        
        
         //认识\s \w \d \
        
        p( " \n\r\t".matches( "\\s{4}"));
        p( " ".matches( "\\S"));
        p( "a_8".matches( "\\w{3}"));
        p( "abc888&^%".matches( "[a-z]{1,3}\\d+[&^#%]+"));
        p( "\\".matches("\\\\"));
        
        
         //POSIX Style
         //p("a".matches("\\p{Lower}"));
        
         //boundary
        
        p( "hello sir".matches( "^h.*"));
        p( "hello sir".matches( ".*ir$"));
        p( "hello sir".matches( "^h[a-z]{1,3}o\\b.*"));
        p( "hellosir".matches( "^h[a-z]{1,3}o\\b.*"));
         //whilte lines
        p( " \n".matches( "^[\\s&&[^\\n]]*\\n$"));
                
        p( "aaa 8888c".matches( ".*\\d{4}."));
        p( "aaa 8888c".matches( ".*\\b\\d{4}."));
        p( "aaa8888c".matches( ".*\\d{4}."));
        p( "aaa8888c".matches( ".*\\b\\d{4}."));
        
        
         //email
        p( "asdfasdfsafsf@dsdfsdf.com".matches( "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
        
         //matches find lookingAt
        
         /*Pattern p = Pattern.compile("\\d{3,5}");
        String s = "123-34345-234-00";
        Matcher m = p.matcher(s);
        p(m.matches());
        m.reset();
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        //p(m.start() + "-" + m.end());
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());*/

        
        
         //replacement
         /*
        Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
        StringBuffer buf = new StringBuffer();
        int i=0;
        while(m.find()) {
            i++;
            if(i%2 == 0) {
                m.appendReplacement(buf, "java");
            } else {
                m.appendReplacement(buf, "JAVA");
            }
        }
        m.appendTail(buf);
        p(buf);
        */

        
         //group
         /*
        Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
        String s = "123aa-34345bb-234cc-00";
        Matcher m = p.matcher(s);
        while(m.find()) {
            p(m.group());
        }
        */

        
         //qulifiers
         /*
        Pattern p = Pattern.compile(".{3,10}+[0-9]");
        String s = "aaaa5bbbb68";
        Matcher m = p.matcher(s);
        if(m.find())
            p(m.start() + "-" + m.end());
        else 
            p("not match!");
        */

        
         //non-capturing groups
         /*
        Pattern p = Pattern.compile(".{3}(?=a)");
        String s = "444a66b";
        Matcher m = p.matcher(s);
        while(m.find()) {
            p(m.group());
        }
        */

        
         //back refenrences
         /*
        Pattern p = Pattern.compile("(\\d(\\d))\\2");
        String s = "122";
        Matcher m = p.matcher(s);
        p(m.matches());
        */

        
         //flags的简写
         //Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        p( "Java".matches( "(?i)(java)"));
    }
    
     public  static  void p(Object o) {
        System.out.println(o);
    }

}
2、正则表达式的应用
(1)代码行统计
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public  class CodeCounter {
  
   static  long normalLines = 0;
   static  long commentLines = 0;
   static  long whiteLines = 0;
  
   public  static  void main(String[] args) {
    File f =  new File( "D:\\share\\JavaProjects\\TankWar1.9.11\\src");
    File[] codeFiles = f.listFiles();
     for(File child : codeFiles){
       if(child.getName().matches( ".*\\.java$")) {
        parse(child);
      }
    }
    
    System.out.println( "normalLines:" + normalLines);
    System.out.println( "commentLines:" + commentLines);
    System.out.println( "whiteLines:" + whiteLines);
    
  }

   private  static  void parse(File f) {
    BufferedReader br =  null;
     boolean comment =  false;
     try {
      br =  new BufferedReader( new FileReader(f));
      String line = "";
       while((line = br.readLine()) !=  null) {
        line = line.trim();
         if(line.matches( "^[\\s&&[^\\n]]*$")) {
          whiteLines ++;
        }  else  if (line.startsWith( "/*") && !line.endsWith("*/")) {
          commentLines ++;
          comment =  true;  
        }  else  if (line.startsWith( "/*") && line.endsWith("*/")) {
          commentLines ++;
        }  else  if ( true == comment) {
          commentLines ++;
           if(line.endsWith( "*/")) {
            comment =  false;
          }
        }  else  if (line.startsWith( "//")) {
          commentLines ++;
        } else {
          normalLines ++;
        }
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if(br != null) {
        try {
          br.close();
          br = null;
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

}
(2)邮件匹配
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public  class EmailSpider {

   public  static  void main(String[] args) {
     try {
      BufferedReader br =  new BufferedReader( new FileReader( "D:\\share\\courseware\\1043633.html"));
      String line = "";
       while((line=br.readLine()) !=  null) {
        parse(line);
      }
    }  catch (FileNotFoundException e) {
       // TODO Auto-generated catch block
      e.printStackTrace();
    }  catch (IOException e) {
       // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

   private  static  void parse(String line) {
    Pattern p = Pattern.compile( "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
    Matcher m = p.matcher(line);
     while(m.find()) {
      System.out.println(m.group());
    }
  }

}
 
正则表达式对字符串的匹配功能很强大,使用得当将节省大量的时间
========================================================================
1、特殊字符处理
双引号'"':\"
"\\s"
"\\w"
 
2、
  public static final String   FILE_REQUIRE_ABSOLUTE                       = "^[\\s]*/[/*]+[\\s]*#require[\\s]+<([\\w/.-]+)>+[\\s]*$";
    public static final String   FILE_REQUIRE_RELATIVE                        = "^[\\s]*/[/*]+[\\s]*#require[\\s]+\"([\\w/.-]+)\"+[\\s]*$";
    
 

本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/383910,如需转载请自行联系原作者
相关文章
|
6月前
|
数据安全/隐私保护
正则表达式小结
正则表达式小结
59 0
|
6天前
正则表达式
正则表达式
52 36
|
5月前
|
XML 数据格式
正则表达式3
正则表达式
|
6月前
最全面的常用正则表达式大全
最全面的常用正则表达式大全
|
机器学习/深度学习 程序员 vr&ar
正则表达式的使用
正则表达式的使用
57 0
|
数据安全/隐私保护
关于正则表达式我所知道的
关于正则表达式我所知道的
98 0
|
数据安全/隐私保护
正则表达式之最常用的
正则表达式之最常用的
84 0
|
编译器 测试技术 C++
正则表达式_1
b站:奇乐编程 10分钟快速掌握正则表达式
122 1
正则表达式_1
什么是正则表达式?
什么是正则表达式?
97 0