. 匹配除换行符(\n、\r)之外的任何单个字符。
| 表示逻辑或。
() 标记一个子表达式的开始和结束位置,表示捕获分组。
[] 定义匹配字符范围。
注:[]内部字符无特殊含义(.即表示. ^表示逻辑非)。
定位符
^ 匹配输入字符串的开头位置(后接字符表示以该字符开头),在[]表达式中表示逻辑非。
$ 匹配输入字符串的结尾位置(前接字符表示以该字符结尾)。
\b 匹配一个单词边界,即字与空格间的位置。如用\bCha匹配Chapter中的Cha。
\B 匹配非单词边界。如用\Bapt匹配Chapter而非aptitude中的apt。
限定符
* 匹配前面子表达式任意次数(可以为零次)。
+ 匹配前面子表达式至少一次。
?匹配前面子表达式零次或一次,或指明一个非贪婪限定符。
其中*和+都为贪婪限定符,即会尽可能多地匹配满足条件的字符,而在它们(*和+)后面加?可以实现非贪婪(最小)匹配。
{} 标记限定符表达式,(内填数字)匹配前面子表达式限定次数。
{2}匹配前面子表达式两次
{2,}匹配前面子表达式至少两次
{2,5}匹配前面子表达式2到5次。
一些包含\的字符
\s 匹配空白字符,包括空格、换页符\f、换行符\n、回车符\r、制表符\t、垂直制表符\v。
\S 匹配非空白字符,相当于[^\f\n\r\t\v]。
\w 匹配数字字母和下划线,相当于[a-zA-Z0-9_]。
\W 匹配不是数字字母和下划线的字符。
\d 匹配数字字符。
\D 匹配非数字字符。
[\u4e00-\u9fa5] 匹配汉字字符。
\nml 如果n为八进制数字 (0-3),且m和l均为八进制数字 (0-7),则匹配八进制nml数字代表的ASCII码转义字符。如\101匹配字母A。
\xnm 如果n和m为十六进制数字 (0-f),则匹配十六进制nm数字代表的ASCII码转义字符。如\0x41匹配字母A。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。如\u4e00匹配第一个中文字符“一”。
\num 对第num个()所获取匹配内容的引用,其中num是一个正整数。如(x)(y)\1匹配xyx,(x)(y)\2匹配xyy。
补充:若要匹配特殊字符本身,需加转义符\,如\^、\$等。
非捕获符
?: 匹配但不存储,用于消除()使相关匹配被缓存的副作用。如industr(?:y|ies) 就是一个比
industry|industries更简略的表达式。
?= 正向肯定预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串。
?! 正向否定预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
?<= 反向肯定预查,与正向肯定预查类似,只是方向相反。
?<! 反向否定预查,与正向否定预查类似,只是方向相反。
例:exp1(?=exp2) 查找exp2前面的exp1
exp1(?!exp2) 查找后面不是exp2的exp1
(?<=exp2)exp1 查找exp2后面的exp1
(?<!exp2)exp1 查找前面不是exp2的exp1
修饰符(标记)
不写在正则表达式里,标记位于表达式/pattern/之外。
i (ignore)不区分大小写
g (global)全局匹配
m (multi line)多行匹配
s 特殊字符.匹配时包含\n(默认情况下不包含\n)
如/pattern/gi表示全局匹配pattern字符,且不区分大小写。