正则表达式的字符

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoetu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值