匹配位置:
\b
:单词的开头或者结束,单词的分界处
^
:匹配字符串的开始
$
:匹配字符串的结束
匹配字符
.
:匹配除换行符以外的任意字符
\d
:匹配一位数字
\s
:匹配任意空白符,包括空格,tab制表符,换行符,中文全角空格
\w
:匹配字母或数字或下划线或汉字等
字符转义
\
:用来转义特定字符,例如\\
,\/
,\{
,\}
,\(
,\)
,\.
,\*
重复
*
:数量,匹配*
前面的内容连续使用任意次(可以是0次)
+
:匹配+
前面的内容1次或者多次(必须有1次)
?
:重复0次或1次
{n}
:重复n次
{n,}
:重复n次或者更多次
{n,m}
:重复n到m次(不能少于n次,不能多于m次)
匹配字符范围
[0-9]
:类似\d
,匹配0-9
中的任意一位数字
[a-zA-Z]
:类似\w
(只有英文的话),匹配a-z,A-Z
之间的任意一个字符
[aeiou]
:匹配任意一个英文元音字母
[.?,!]
:匹配标点符号(.或?或,或!
)
分支条件
|
:不同规则用|
隔开,例如:0\d{2}|\d{3}[- ]?\d{8}
分组
()
:分组用来重复多个字符的匹配次数,例如:(\d{1,3}\.){3}\d{1,3}
中(\d{1,3}\.)
整个分组重复3次
反义
\W
:匹配任意不是字母、数字、下划线、汉字的字符
\S
:匹配任意不是空白符的字符
\D
:匹配任意非数字的字符
\B
:匹配任意不是单词开始或结束的位置
[^x]
:匹配除了x以外的任意字符
[^aeiou]
:匹配除了aeiou
这几个字符以外的任意字符
后向引用
后向引用:用于重复搜索前面某个分组匹配的文本。
常用分组语法:
捕获:
(exp)
:匹配exp,并捕获文本到自动命名的组里
(?<name>exp)
:匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)
:匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言
(?=exp)
:匹配exp前面的位置
(?<=exp)
:匹配exp后面的位置
(?!exp)
:匹配后面跟的不是exp的位置
(?<!exp)
:匹配前面不是exp的位置
注释
(?#comment)
:这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
贪婪与懒惰
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b
,它将会匹配最长的以a开始,以b结束的字符串
。如果用它来搜索aabab
的话,它会匹配整个字符串aabab
。这被称为贪婪匹配
。
懒惰(非贪婪)限定符
*?
:重复任意次,但尽可能少重复
+?
:重复一次或更多次,但尽可能少重复
??
:重复0次或1次,但尽可能少重复
{n,m}?
:重复n到m次,但尽可能少重复
{n,}?
:重复n次以上,但尽可能少重复
网友评论