理解正则表达式
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>。