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 多行修饰符。用于多行匹配。