. 匹配除换行符以外的任意字符
* 表示前面出现的内容可以连续重复出现任意次
+ 出现至少一次
? 出现 0 次或者 1 次

\b 代表单词的开始或结束,也就是单词的分界处
\B 匹配不是 \b 的位置
\d 匹配 0 到 9 的任意数字
\D 匹配不是 \d 的字符
\s 匹配任意形式的空白符
\S 匹配不是 \s 的字符

\w 匹配字母 / 数字 / 下划线 / 汉字
\W 匹配不是 \w 的字符

[] 字符集合

[^x] 匹配除 x 以外的任意字符
[^aeiou] 匹配除 aeiou 以外的任意字符
[a-z] 匹配 a 到 z 的 26 个字母中任意一个,- 表示范围
. 在字符集合中表示小数点

^ 匹配字符串的开始
$ 匹配字符串的结束
\ 转义字符
{n} 出现 n 次
{n,} 出现至少 n 次
{n,m} 出现次数大于 n 小于 m
() 分组,并对匹配到的内容进行存储

  1. 每对括号会分配一个编号,顺序从 1 开始。编号 0 表示整个正则表示匹配的内容
  2. 可以获取括号中匹配到的内容

(?:表达式) 匹配括号中的表达式,但是不存储匹配到的内容
反向引用 对分组匹配存储起来的内容再次进行匹配

(abc)d\1 可以匹配到的内容为(加粗部分):abcabc abc abcabcdabcd abcabcabcdabc

贪婪模式 匹配的字符越多越好
非贪婪模式 匹配的字符越少越好,在修饰的量词后再加上一个 ?

(?=表达式) 断言某个位置的后面能匹配表达式
(?<=表达式) 断言某个位置的前面能匹配表达式
(?!表达式) 断言某个位置的后面不能匹配表达式
(?<!表达式) 断言某个位置的前面不能匹配表达式