1. 字符
[abc]
字符集。匹配集合中所含的任一字符。
[^abc]
否定字符集。匹配任何不在集合中的字符。
[a-z]
字符范围。匹配指定范围内的任意字符。
.
匹配除换行符以外的任何单个字符。
\
转义字符。
\w
匹配任何字母数字,包括下划线(等价于[A-Za-z0-9_]
)。
\W
匹配任何非字母数字(等价于[^A-Za-z0-9_]
)。
\d
数字。匹配任何数字。
\D
非数字。匹配任何非数字字符。
\s
空白。匹配任何空白字符,包括空格、制表符等。
\S
非空白。匹配任何非空白字符。
2. 分组和引用
(expression)
分组。匹配括号里的整个表达式。
(?:expression)
非捕获分组。匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用。
\num
对前面所匹配分组的引用。比如(\d)\1
可以匹配两个相同的数字,(Hello)(World)\1\2
则可以匹配HelloWorldHelloWorld
。
3. 锚点/边界
^
匹配字符串或行开头。
$
匹配字符串或行结尾。
\b
匹配单词边界。比如World\b
可以匹配HelloWorld
末尾的World
,不能匹配HelloWorldJava
中的World
。
\B
匹配非单词边界。比如World\B
可以匹配HelloWorldJava
中的World
,不能匹配HelloWorld
中的World
。
4. 数量表示
?
匹配前面的表达式0个或1个。即表示可选项。
+
匹配前面的表达式至少1个。
*
匹配前面的表达式0个或多个。
|
或运算符。并集,可以匹配符号前后的表达式。
{m}
匹配前面的表达式m个。
{m,}
匹配前面的表达式最少m个。
{m,n}
匹配前面的表达式最少m个,最多n个。
5. 预查断言
(?=)
正向预查。比如Hello(?=World)
能匹配HelloWorld
中的Hello
,但不能匹配HelloJava
中的Hello
。
(?!)
正向否定预查。比如Hello(?!World)
不能匹配HelloWorld
中的Hello
,但能匹配HelloPig
中的Hello
。
(?<=)
反向预查。比如(?<=Hello)World
能匹配HelloWorld
中的World
,但不能匹配ReadWorld
中的World
。
(?<!)
反向否定预查。比如(?<!Hello)World
不能匹配HelloWorld
中的World
,但能匹配ReadWorld
中的World
。
6. 特殊标志
/.../i
忽略大小写。
/.../g
全局匹配。
/.../m
多行修饰符。用于多行匹配。