什么时候?'在正则表达式中充当非贪婪的匹配器,何时表示模式是可选的?

时间:2016-04-14 03:46:48

标签: regex

我是正则表达式的初学者。

我读过'?'在正则表达式中意味着一个模式也是可选的,当它在' +'之后使用时。或' *','?'可以用于非贪婪的比赛。

我在regex101上尝试了这个,这是链接 - https://regex101.com/r/rV5sW5/1。我在这里找不到非贪婪的比赛。需要帮助理解这一点。

2 个答案:

答案 0 :(得分:1)

?表示非贪婪(也称为“不情愿”),当它跟随星号*或加号+重复构造时。

在你的情况下,问号肯定会充当非贪婪的限定符,因为\s*?没有匹配。这正是*?的预期行为 - 它意味着“匹配尽可能少”,所以当可以匹配任何内容时,子表达式都不匹配。

答案 1 :(得分:1)

这是一个简单的例子。鉴于文本

aaaaaabbb

应用正则表达式

a+(.)
使用贪婪量词的

将匹配尽可能多的a个字符,并在捕获的组中返回b。相比之下,

a+?(.)

仅匹配第一个a,因为这是最短的匹配,并在捕获的组中返回(第二个)a

除了量词(*+等)之后的其他任何地方,问号都有其可选元素的常规ERE含义(广义量词{0,1}的简写;并且您可以使用??制作非贪婪的可选项,也可以使用{3,7}?制作非贪婪的广义量词!)

也许还要注意,非贪婪量词是正则表达式的一个相对较新的补充(在Perl 5中引入),并且在许多方言中根本不可用。