TODO
整理了一下看论文所遇到的字符
Lazy quantifiers 贪婪限定符
*
匹配前面的子表达式零次或多次。
例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+
匹配前面的子表达式一次或多次。
例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
?
匹配前面的子表达式零次或一次。
例如,“do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。
非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
例如,对于字符串 “oooo”,‘o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。
{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。
请注意在逗号和两个数之间不能有空格。
Achors 符号
^
匹配输入字符串的开始位置。
$
匹配输入字符串的结束位置。
\B和\b
\b
匹配一个单词边界,也就是指单词和空格间的位置。
例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B
匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
Lookarounds
根据上下文进行匹配
positive lookahead 正向肯定预查
r 1 ( ? = r 2 ) r_1(?=r_2) r1(?=r2)
正向肯定预查(look ahead positive assert),在任何匹配 r 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
例如,“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows”。
预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
negative lookahead 正向否定预查
r 1 ( ? ! r 2 ) r_1(? ! r_2) r1(?!r2)
正向否定预查(negative assert),在任何不匹配 r 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
例如"Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"。
预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
positive lookbehind 反向肯定预查
(
?
<
=
r
2
)
r
1
(?<=r_2)r_1
(?<=r2)r1
反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。
例如,“(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows”,但不能匹配"3.1Windows"中的"Windows"。
negative lookahead 反向否定预查
( ? < ! r 2 ) r 1 (?<! r_2)r_1 (?<!r2)r1
反向否定预查,与正向否定预查类似,只是方向相反。
例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。
Capture group 获取组
(
r
)
(r)
(r)
匹配 r 并获取这一匹配
Non-capturing group 不获取组
( ? : r ) (?:r) (?:r)
匹配 r 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。 这在使用 “或” 字符 (|)来组合一个模式的各个部分是很有用。
例如, 'industr(?:y|ies) 就是一个比 'industry|industries’更简略的表达式。
Backreference 反向引用
反向引用需要使用到分组,分组就是使用()括起来的部分为一个整体,在进行分组匹配时的原则是:由外向内,由左向右。
\i
例如:\1 ,\2
- \1:表示的是引用第一次匹配到的()括起来的部分
- \2:表示的是引用第二次匹配到的()括起来的部分
参考资料:
- https://www.runoob.com/regexp/regexp-metachar.html
- https://blog.csdn.net/qq_33248299/article/details/53559924
- https://blog.csdn.net/raoshihong/article/details/17004641