正则的基本语法:
[ab] a或者b
[a-z] 所有的小写字母
[a-zA-Z0-9_] 数字字母下划线
[^a] 非字符a
[^ab] 非字符a和非字符b
注意: ^只有在[]内部才表示非, 如果不是在内部表示字符开头
d 表示数字 等价于 [0-9] (digital)
D 表示非数字 等级于[^0-9]
w 表示单词字符串 数字字母下划线 等价于 [a-zA-Z0-9_] (word)
W 表示非单词字符 等价于 [^a-zA-Z0-9_]
s 表示空白字符 space 空格
S 非空白字符
. 表示任意字符 但不包括:
. 只匹配真正的 .
^ 表示字符串的开头
$ 字符串的结尾
数量词:
a{m} 正好m个a
a{m,} 至少m个a
a{m,n} 至少m个a, 至多n个 大于等于m小于等于n
a+ 表示至少一个 等价于 a{1,}
a* 表示至少0个 a{0,}
a? 要么0个要么1个 a{0,1}
捕获组:
()捕获组 -》划分界限
String s = "lzc@atguigu.com.cn";
boolean result = s.matches("\w{3,15}@\S+\.(com|cn|edu|org|com\.cn)");
经典应用:
隐藏手机号
String s = "18603071634"; System.out.println(s.replaceAll("(\d{3})(\d{4})(\d{4})", "$1****$3")); //186****1634
todo
在java的字符串的方法中, 有4个方法是直接支持正则表达式
match
replaceAll
replaceFirst
split
其他方法使用参考https://www.jb51.net/article/72081.htm