.
:匹配除换行符外的任一单字符
^
:匹配开头,只命中后面的第一个字符/分组
$
:匹配结尾,只命中前面的第一个字符/分组
?
:匹配前面的表达式0次或1次
{n,m}
:匹配前面的表达式以给定的次数,比如{2}表示要出现2次,{2,}表示要出现最少2次,{2,6}表示出现的次数可以是2到6次
*
:匹配前面的表达式0次或多次,*等价于{0,}
+
:匹配前面的表达式1次或多次,+等价于{1,}
\
:转义字符
|
:或运算符
[abc]
:匹配[]里的任一字符,比如例子里表示匹配a或者b或者c,也可以在[]里面指定匹配的范围,如[0-9]、[a-zA-Z]
[^abc]
:匹配任何指定字符之外的所有字符
()
:分组,匹配出现在括号里的整个字符串,可以搭配上面的限定符一起使用
\num
:对前面()分组的引用,比如(abc)\1表示可以匹配abcabc;(abc)(def)\1\2表示可以匹配abcdefabcdef,其中\1表示引用(abc),\2表示引用(def)。注意引用的是实际的值而不是表达式,比如 (\w+).*\1
可以匹配 abc中文abc
,但不能匹配 abc中文123
,因为 \1
引用到的是前面的 abc
,而不是\w+
(a|b)
:匹配出现在括号里的以|分隔开的多个字符串(或的关系),可以搭配上面的限定符一起使用
\w
:匹配任意数字、字母、下划线,等价于[0-9a-zA-Z_]
\W
:匹配任意非数字、字母、下划线,等价于[^0-9a-zA-Z_]
\d
:匹配任意数字
\s
:匹配任意空白字符,包括空格、制表符、换行符等
\S
:匹配任意非空白字符
\b
:单词边界符
[\u4e00-\u9fa5]
:匹配中文
断言
先行断言从左往右看,后行断言从右往左看
(?=表达式)
:**正向先行断言:**指在某个位置向右看,表示所在位置右侧要能匹配给定表达式
(?!表达式)
:**反向先行断言:**指在某个位置向右看,表示所在位置右侧不能匹配给定表达式
(?<=表达式)
:**正向后行断言:**指在某个位置向左看,表示所在位置左侧要能匹配给定表达式
(?<!表达式)
:**反向后行断言:**指在某个位置向左看,表示所在位置右侧不能匹配给定表达式
常用正则表达式
^(?!.*(str))
:表示字符串里不能包含给定的字符,若不想包含多个给定字符,可以用 ^(?!.*(str1|str2))
(?=.*(补助|救助))(^(?!.*(交通|通讯)))
:包含补助/救助,同时不包含交通/通讯
'[^a-zA-Z0-9\u4e00-\u9fa5]+'
:去除所有非中文、英文字母和数字的字符