正则表达式是一种强大而灵活的文本处理工具,通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式的语法
字符
-元字符
元字符 | 意义 |
. | 匹配除”\r\n”之外的任何单个字符 |
^ | 匹配字符串开始位置 |
$ | 匹配字符串结束位置 |
\s | 匹配空格字符,等价于[\f\n\r\t\v] |
\S | 匹配非空格字符 |
\w | 匹配单词类字符,等价于[A-Za-z0-9_] |
\W | 匹配非单词类字符 |
\d | 匹配任意数字,等价于[0-9] |
\D | 匹配非数字字符,等价于[^0-9] |
-组合元字符
正则表达式中,我们可以用中括号[]括起来若干字符,再进行交并差的运算,如下
字符组 | 意义 |
[abc] | 匹配a、b、c中的任何一个字符 |
[^abc] | 匹配除a、b、c以外的任何字符 |
[a-zA-Z] | 匹配任意一个英文字母 |
[a-d] | 匹配a至d的任意一个字母 |
[a-d[x-z]] | 并(或)运算,匹配a、b、c、d或x、y、z中任意一个 |
[a-z&&[x-z]] | 交(与)运算,匹配x、y、z |
[a-f&&[^bc]] | 差运算,匹配a、d、e、f |
注意:[]括起来的部分只匹配一个字符。不要出现[]嵌套()的表达式!
量词
进行正则表达式匹配时,通过设置量词,可以限定某个字符匹配的次数。
量词格式 | 意义 |
X? | 表达式X出现0次或1次,等价于{0,1} |
X* | 表达式X出现0次或多次,等价于{0,} |
X+ | 表达式X出现1次或多次,等价于{1,} |
X{n} | 表达式X正好出现n次 |
X{n,} | 表达式X至少出现n次 |
X{n,m} | 表达式X出现n次至m次 |
注意:量词对它前面的字符表达式生效,通过()可以将几个元字符组合到一起形成词组表达式来使用量词。()括起来的词组可以用|来进行“或”运算。
通过元字符与量词的组合,可以写出正则表达式以适用于各种场景下的特定格式字符串匹配。
贪婪与非贪婪模式匹配
在量词后加上?就表示非贪婪模式,不加则为贪婪模式。
在使用时,贪婪模式会尝试尽可能多的匹配,非贪婪模式则匹配到第一个符合规则的内容就停止匹配。
贪婪模式 | 非贪婪模式 |
E* | E*? |
E+ | E+? |
E{m,} | E{m,}? |
E{m,n} | E{m,n}? |
[正则表达式]String()的应用
matches()方法
字符串通过matches()方法验证是否符合某个规则文本的特征,如下
//规则文本
String dotRegex="...老师";
//验证字符串是否符合正则的规则
System.out.println("kuki老师".matches(dotRegex));
System.out.println("hi老师".matches(dotRegex));
System.out.println("roy老师".matches(dotRegex));
#输出结果
false
false
true
Split()方法
split()方法将字符串从正则表达式匹配的位置截取为字符串数组。
String s="[x,9,x,7,x,6,x,8,0]";
//以,[]把字符串拆开,获得字符串组
String[] split=s.split(",|\\[|\\]");
System.out.println("#获得字符串组的输出结果");
System.out.println(Arrays.toString(split));
//通过遍历去把把字符组中每个跟成员打印出来
System.out.println("#打印遍历后成员的值");
for (String s1 : split) {
System.out.println(s1);
}
#输出结果
#获得字符串组的输出结果
[, x, 9, x, 7, x, 6, x, 8, 0]
#打印遍历后成员的值
x
9
x
7
x
6
x
8
0
replaceAll
replaceFirst()和replaceAll()分别替换正则表达式第一个匹配的子串或者替换整个字符串String中所有匹配正则表达式的内容。
String s="[1,9,3,7,4,6,5,8,0]";
//把字符串的1到5全部替换成x
String x = s.replaceAll("[1-5]","x");
System.out.println(x);
#输出结果
[x,9,x,7,x,6,x,8,0]