JavaSE—正则表达式

一、正则表达式

       1、正则表达式(regex),用来描述一个匹配字符串集合的模式;

       2、Unicode编码中汉字的范围:\ u2E80- \ u9FFF;

       3、常用的正则表达式

             (1)、(pattern):指定字符模式,例如:JAVA匹配的java;

             (2)、(?:pattern):同上,只不过性能上有了优化;

             (3)、(?!pattern):若字符串符合模式则将其过滤掉,在分析日志的时候,要过滤掉所有info,则可以写作 "^(?!.*.info)..*$";

             (4)、\num:表示位置,例如:“([\\d])\\1{1}([az])\\2{1}”,匹配22ee这样的字符串,\\1指的是第一个括号内的内容;

             (5)、:任意单个字符,例如:Java匹配 j..a;

             (6)、(ab | cd):ab或者cd,例如:"java".matches("j(ava|ave)"),结果为真;

             (7)、[abc]:a,b或c,例如:  “java”.matches("j[abc]va"),结果为true;

             (8)、[^ abc]:除了a,b或c外的任意字符,  “java”.matches(“j [^ abc] va”),结果为false;

             (9)、[a-z]:a到z的任意字符,包括a和z,例如:  “java”.matches(“j [az] va”),结果为true;

             (10)、[^ a-z]:除了a-z的任意字符,例如:  “java”.matches(“j [^ a-z] va”),结果为false;

             (11)、[a-e [m-p]]:a-e或者m-p,  例如 :  “java”.matches(“j [a-e [m-p]] va”),结果为true;

             (12)、[a-e && [e-z]:ae与ez的交集,例如:“java”.matches(“j [ae && [ez]] va”),结果为false;

             (13)、\b:匹配一个单词边界,例如:“welcome”.replaceAll(“me \\ b”,“o”),输出结果为welcoo;

             (14)、\B:匹配一个非单词边界,例如:“welcomea”.replaceAll(“me \\ B”,“o”),输出结果为welcooa;

             (15)、\d:0-9的一个数,例如:“java2”.matches(“java [\\ d]”),结果为true;

             (16)、\D:一位非数字,例如:“java2”.matches(“java [\\ D]”),结果为false;

             (17)、\w:匹配字母,数字,下划线,例如:“java _”.matches(“java [\\ w]”),结果为true;

             (18)、\W:除字母,数字,下划线以外的任意字符,  例如:“java哈”.matches(“java [\\ W]”),结果为true;

             (19)、\s:空白字符,例如:“java 2”.matches(“java [\\ s] 2”),结果为true;

             (20)、\S:非空白字符,例如:“java2”.matches(“java [\\ S]”),结果为true;

             (21)、\f:匹配一个换页符;

             (22)、\n:匹配一个换行符;

             (23)、\r:匹配一个回车符;

             (24)、\t:匹配一个制表符;

             (25)、\v:匹配一个垂直制表符;

             (26)、\un:匹配n,n是一个用四个十六进制数字表示的Unicode字符,例如:\ u00A9匹配版权符号©;

             (27)、p *:模式p出现0次或者多次,例如:“javaj”.matches(“java * j”),结果为true;

             (28)、p +:模式p出现至少一次或者多次,例如:“javajavaj”.matches(“(java)+ j”),结果为true;

             (29)、p ?:模式p重复0次或者1次,例如:“javaj”.matches(“(java)?j”),结果为true;

             (30)、{n}:重复n次,例如:“aaa”.匹配(“a {3}”),结果为true;

             (31)、{n,m}:重复n或者m 次,  “aaa”.匹配(“a {3,4}”),结果为true;

             (32)、{n,}:至少重复n次,  “aaaaaa”.匹配(“a {3,}”),结果为true;

        4、'(' 和 ')' 在正则表达式中是特殊符号,必须用“\\”进行转义,写为“\\(”和“\\)”,例如:

             “(911)010-2345”。匹配(“\\([1-9] [\\ d] {2} \\)[\\ d] {3} - [\\ d] {4}”) ,结果为真;

       5、正则表达式中不能包含任何空白符,否则将会报错;

       6、A.和和A *意义是不同的,A.*是的意思是匹配以'A'开头的任意长度的字符串,A *的意思是匹配任意长度的由字符'A'组成的字符串;

       7、\w等同于[A-Za-z0-9 _],\W等同于[^ A-Za-z0-9_];

       8、可以使用()为模式分组,(ab){3}匹配ababab,ab {3}匹配abbb;

       9、正则表达式也可以与字符串类中的的replaceAll,replaceFirst和split方法共用,例如:

System.out.println(“java java java”.replaceAll(“v\\w”,“wi”));
//结果为“jawi jawi jawi”;

System.out.println(“java java java”.replaceFirst(“v\\w”,“wi”));
//结果为“jawi java java”;

String [] split =“java2html2sql”.split(“\\d”);
//分割为“java”,“html”,“sql”;

      10、split(regex,limit),limit参数确定模式匹配多少次,如果limit <= 0,那么和split(regex)等同,如果limit> 0,模式最多匹配limit-1次,例如:

String [] split =“java2html2sql”.split(“\\ d”,0);
//分割为“java”,“html”,“sql”;
String [] split =“java2html2sql”.split(“\\ d”,1)
//分割为“java2html2sql”;
String [] split =“java2html2sql”.split(“\\ d”,2)
//分割为“java”,“html2sql”;
String [] split =“java2html2sql”.split(“\\ d”,3)
//分割为“java”,“html”,“sql”;

       11、默认所有的量词符都是贪婪的,这意味着它们会尽量的匹配可能的很多次,例如:

System.out.println(“jaaavaa”.replaceFirst(“a +”,“e”));
//结果为“jevaa”;
System.out.println(“jaaavaa”.replaceAll(“a +”,“e”));
//结果为“jeve”;
//可以在量词符后加,这意味着它们将匹配尽可能少的次数,例如?
System.out.println(“jaaavaa”.replaceFirst(“a +?”,“e”));
//结果为“jeaavaa”;

猜你喜欢

转载自blog.csdn.net/dyz4001/article/details/81916193