描述的是一个规则,匹配一类字符串
1. 示例
[Ji]ava.+
匹配第一个字母是J或j,接下来三个三个字母是ava,其余部分由一个或多个任意的字符构成
[Jj], [0-9] 表示一个范围,所有Unicode值落在两个边界范围内的字符
[^] 表示补集
2. 转义字符
| 符号 |
描述 |
\n |
换行符 |
\t |
制表符 |
\\ |
\ |
\^,\$,\.,\(,\),\{,\},\?,\+,\-,\[,\],| |
匹配\后字符本身 |
3. 标准字符
| 字符 |
描述 |
| \d |
0-9数字 |
| \w |
字母,数字,下划线 A-Z,a-z,0-9 |
| \s |
空格,制表符,换行符等空白字符的其中任意一个 |
| . |
任意字符 |
4. [] 内任意字符
| 字符 |
描述 |
| [ab5@] |
匹配 a或b或c或5或@ |
| [^abc] |
a,b,c以外的任意字符 |
| [f-k] |
f-k之间的任意字母 |
| [^A-F0-3] |
A-F,0-3之外的任意字符 |
包含在中括号中的特殊符号会失去特殊意义,除了^,-之外。
如[\d.\-+]表示数字,小数点,-,+
5. 量词
| 字符 |
描述 |
| {n} |
表达式重复n次 |
| {m,n} |
重复至少m次,至多n次 |
| {m,} |
重复至少m次 |
| ? |
0次或1次,{0,1} |
| + |
至少1次,{1,} |
| * |
不出现或出现任意次,{0,} |
6. 字符边界
| 字符 |
描述 |
| ^ |
与字符串开始的地方匹配 |
| $ |
与字符串结束的地方匹配 |
| \b |
匹配一个单词边界, (前面的字符和后面的字符不全是\w) |
7. 选择符和分组
| 字符 |
描述 |
| | |
两个表达式之间或关系 |
| () |
括号内的表达式可以作为整体被修饰,()\1表示捕获的整体作为匹配模式 go gogo |
| (?:表达式) |
抵消()带来的作用 |
8. 预搜索-零宽断言
| 字符 |
描述 |
| (?=exp) |
断言后匹配exp [a-z]+(?:\d) go222 222本身不计入匹配 |
| (?<=exp) |
断言前匹配exp |
| (?!exp) |
断言后不匹配exp |
| (?<!exp) |
断言前不匹配exp |
9. 常用表达
9.1. 电话号码
1 2
| 0\d{2-3}-\d{7,9} 1[356789]\d{11}
|
9.2. 邮箱
1 2 3 4
| 12334@qq.com 234@sina.com.cn
[\w\-]+@[A-Za-z0-9]+(\.[A-Za-z]{2,3}){1,2}
|
10. java中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import java.util.regex.Matcher; import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\d");
Matcher matcher = pattern.matcher("aw");
boolean flag =matcher.matches(); System.out.println(flag);
boolean bool = matcher.find();
String str = matcher.group(0);
String str = matcher.replaceAll("#");
Stream<String> stream = pattern.splitAsStream("输入字符串");
|