简单转义字符(小写字符、大写字符取反)
\n 换行符
\t 制表符
\\ * . . . \本身
\d 任意数字
\w 任意数字、字母、下划线
\s 空格、制表符、换行符、空白字符
. 小数点匹配任意字符 不包含换行符,包含换行符的为[ \s\S]
自定义字符集合
[ ] 匹配[ ] 中的任意一个字符,除了^ - 只有除了. 以外的简单转义字符有效
[ ab5@] 匹配"a" , "b" , "5" , "@"
[ ^ ab] 匹配除了"a" , "b" 之外的字符
[ f- k] 匹配f- k之间的任意一个字符
[ ^ A- F0- 3 ] 匹配A- F,0 - 3 之外的任意一个字符
量词 修饰匹配次数的特殊字符
{ n} 表达式重复n次
{ m, n} 表达式至少重复m次,最多重复n次
{ m, } 表达式至少重复m次
? 匹配表达式0 次或者1 次,相当于{ 0 , 1 }
+ 表达式至少出现1 次,相当于{ 1 , }
* 表达式不出现或出现任意次,相当于{ 0 , }
贪婪模式( 默认) : 当匹配{ 3 , 6 } 的时候,默认先匹配6 个字符,选最多
非贪婪模式( 修饰匹配次数的特殊字符后加 "?" ps: "\d{3,6}?" ) : 优先匹配最少
\d{ 6 } 任意连续6 个的数字
{ \d\d} { 6 } 任意6 个连续的两个数字,一共12 个
a\d? b 匹配ab或者a2b
a\d+ b 匹配a2b或者a22222b. . .
a\d* b 匹配ab或者a2b或者a2222b. . .
字符边界,匹配符合条件的位置(不是字符)
概念:0 宽度,是位置不是字符
^ 匹配与字符串开始的地方
$ 匹配与字符串结束的地方
\b 匹配一个单词的边界,左右不全是\w ( 字母数字下划线)
^ i 匹配整个字符串开始的地方
i$ 匹配整个字符串结束的地方
what\b 匹配单词what结束的位置
单行模式与多行模式 ^ Ai \Z
选择符和分组
| 匹配左右两边“或”关系
( ) 捕获组,对括号内进行一个整体且进行编号从1 , 2 , 3 开始
( ? : [ a- z] ) 非捕获组,抵消( ) 带来的副作用, 不保存在内存中
\nnn 反向引用,对分组已捕获的字符串进行引用
预搜索(零宽断言)
( ? = exp) 断言自身出现的位置的后面匹配表达式exp
( ? <= exp) 断言自身出现的位置的前面能匹配表达式exp
( ? ! exp) 断言此位置的后面不能匹配表达式exp
( ? < ! exp) 断言此位置的前面不能匹配表达式exp
ps:
[ a- z] + ( ? = ing) 匹配ing前面的a- z字符
[ a- z] + ( ? = \d+ ) 匹配任意数字前的a- z字符
JAVA中的使用
String. replaceAll ( "正则表达式" , "替换的" ) ;
Patter p = Pattern. compile ( "正则表达式" ) ;
Matcher m = p. matcher ( "字符串" ) ;
boolean b = m. matches ( ) ;
m. find ( ) ;