理解正则表达式
posts/%E7%90%86%E8%A7%A3%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F正则表达式(英語:Regular Expression,常简写为 regex、regexp 或 RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。Wikipedia
基本概念
Boolean “or”
|
用于多组匹配。例如gray|grey
匹配单词 gray 或单词 grey。
Grouping
()
用于定义运算符号范围与优先级,例如gr(a|e)y
等同与上文gray|grey
。
Quantification
?
匹配前面出现的元素零次或一次。例如colou?r
可以匹配单词 color 或 colour。*
匹配前面出现的元素零次或多次。例如ab*c
可以匹配 ac,abc,abbc,abbbc 等。+
匹配前面出现的元素一次或多次。例如ab+c
可以匹配 abc,abbc,abbbc 而不会匹配 ac。{n}
匹配前面出现的元素 n 次。{min,}
匹配前面出现的元素至少 min 次。{,max}
匹配前面出现的元素至多 max 次。{min,max}
匹配前面出现的元素次数在 min 和 max 范围内。
Wildcard
.
匹配任何字符(换行符除外)。 例如a.b
可以匹配 aab,abb,acb,adb 等。
语法
Delimiters
/
用于各模式间的分隔。
Metacharacter
^
匹配字符串中的起始位置。$
匹配字符串的结束位置或字符串结束换行符之前的位置。[ ]
匹配括号内的单个字符。例如[abc]
匹配字符 a 或 b 或 c。[a-c]
匹配字符 a 到字符 z 内的所有单词。[^ ]
匹配括号内以外的单个字符。\d
匹配数字字符。\D
匹配非数字字符。\w
匹配单词字符,等价于[A-Za-z0-9_]
(注意 Unicode 正则表达式会匹配中文字符)。\W
匹配非单词字符,等价于^[A-Za-z0-9_]
。\s
匹配空白字符(空格,换行,TAB 等)。\S
匹配非空白字符。\b
匹配一个单词边界。例如er\b
可以匹配 never 中的 er,但不能匹配 verb 中的 er。\B
匹配非单词边界。例如er\b
能匹配 verb 中的 er,但不能匹配 never 中的 er。\f
匹配一个换页符。\n
匹配换行符。\t
匹配制表符。\v
匹配垂直制表符。
贪婪与非贪婪匹配
贪婪标识符:+
,?
,*
,{n}
,{n,}
,{n,m}
。
非贪婪标识符:+?
,??
,*?
,{n}?
,{n,}?
,{n,m}?
。
提取 HTML 标签。
<div><span>span1<span/><span>span2<span/></div>
<div><span>span3<span/><span>span4<span/></div>
贪婪匹配<div>.*<\/div>
会匹配所有元素。
非贪婪匹配<div>.*?<\/div>
会匹配<div><span>span1<span/><span>span2<span/></div>
和<div><span>span3<span/><span>span4<span/></div>
。