Java 正则表达式-(第八天)

Java 正则表达式-(第八天)

一、如何匹配字符串

  • 判断字符串是否是有效的电话号码
  • 判断字符串是否是有效的电子邮件地址
  • 判断字符串是否是有效的时间

正则表达式就是一个描述规则的字符串

java.util.regex

String str = "13538724480";
String rule = "\\d{11}";//'/d'表示0-9的一个数
str.matches(rule);

二、匹配规则

从左到右规则匹配
部分特殊字符需要添加反斜杠“\”

正则表达式 规则 可以匹配
A 指定字符 A
\u548c 指定Unicode字符
. 任意字符 a,b,&,0
\d 数字0~9 0~9
\w 大小写字母,数字和下划线 az,AZ,0~9,_
\s 空格、Tab键 空格,Tab
\D 非数字 a,A,&,_,……
\W 非\w &,@,中,……
\S 非\s a,A,&,_,……

多个字符的匹配规则如下

正则表达式 规则 可以匹配
A* 任意个数字符 空,A,AA,AAA,……
A+ 至少1个字符 A,AA,AAA,……
A? 0个或1个字符 空,A
A{3} 指定个数字符 AAA
A{2,3} 指定范围个数字符 AA,AAA
A{2,} 至少n个字符 AA,AAA,AAAA,……
A{0,3} 最多n个字符 空,A,AA,AAA

三、正则表达式

正则表达式 规则 可以匹配
^和$ 匹配开头和结尾 “^A\d{3}$”
[…] 可以匹配范围内的字符 “[abc]” “[a-f]” “[a-f0-9]{6}” “[a-f0-9_ ]{6}”
[^…] 可以匹配非范围内的字符 “[^0-9]{6}”
“|” “AB|CD” “learn\s(AB|CD)”

分组匹配

正则表达式 规则 可以匹配
(…) 可以分组 “(\d{4})-(\d{1,2})-(\d{1,2})”
  • 匹配电话号码“^(\d{3,4})-(\d{8})$”
  • 匹配24小时时间“^([0-1][0-9]|2[0-3])[0-5][0-9])$”

反复使用一个正则表达式字符串进行快速匹配效率较低
可以把正则表达式字符串编译为Pattern对象

String str = "2020-03-14";
        Pattern com = Pattern.compile("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
        Matcher mat = com.matcher(str);
        if (mat.matches()) {
     
            System.out.println(mat.group(0));//表示整个匹配字符串
            System.out.println(mat.group(1));
            System.out.println(mat.group(2));
        }

四、非贪婪匹配

判断该数字末尾0的个数
“1230000” 4个0 “^(\d+)(0*)$” 1230000 “”
正则表达式默认使用贪婪匹配
使用符号“?”实现非贪婪匹配
“1230000” 4个0 “^(\d+?)(0*)$” 123 0000
“\d??”

五、分割字符串

//String[] String.split(String regex)
String[] s1 = "a b c".split(" ");
String[] s2 = "a b c".split("\\s");
String[] s3 = "a b c".split("\\s+");
String[] s1 = "a b c".split("[\\,\\;\\s]+");

六、搜索字符串

Matcher.find()

String s = "the quick brown fox jumps over the lazy dog.";
        Pattern p = Pattern.compile("\\wo\\w");
        Matcher m = p.matcher(s);
        while (m.find()) {
     
            String sub = s.substring(m.start(), m.end());
            System.out.println(sub);
        }

七、替换字符串

String.replaceAll()

 String s = "The     quick\t\t brown   fox  jumps   over the  lazy dog.";
        String r = s.replaceAll("\\s+", " ");
        System.out.println(r); // "The quick brown fox jumps over the lazy dog."

反向引用
如果我们要把搜索到的指定字符串按规则替换,比如前后各加一个xxxx,这个时候,使用replaceAll()的时候,我们传入的第二个参数可以使用$1、$2来反向引用匹配到的子串。

String s = "the quick brown fox jumps over the lazy dog.";
        String r = s.replaceAll("\\s([a-z]{4})\\s", " $1 ");
        System.out.println(r);//the quick brown fox jumps over the lazy dog.

你可能感兴趣的:(Java,java)