我是正则表达式的初学者。
我读过'?'在正则表达式中意味着一个模式也是可选的,当它在' +'之后使用时。或' *','?'可以用于非贪婪的比赛。
我在regex101上尝试了这个,这是链接 - https://regex101.com/r/rV5sW5/1。我在这里找不到非贪婪的比赛。需要帮助理解这一点。
答案 0 :(得分:1)
?
表示非贪婪(也称为“不情愿”),当它跟随星号*
或加号+
重复构造时。
在你的情况下,问号肯定会充当非贪婪的限定符,因为\s*?
没有匹配。这正是*?
的预期行为 - 它意味着“匹配尽可能少”,所以当可以匹配任何内容时,子表达式都不匹配。
答案 1 :(得分:1)
这是一个简单的例子。鉴于文本
aaaaaabbb
应用正则表达式
a+(.)
使用贪婪量词的将匹配尽可能多的a
个字符,并在捕获的组中返回b
。相比之下,
a+?(.)
仅匹配第一个a
,因为这是最短的匹配,并在捕获的组中返回(第二个)a
。
*
或+
等)之后的其他任何地方,问号都有其可选元素的常规ERE含义(广义量词{0,1}
的简写;并且您可以使用??
制作非贪婪的可选项,也可以使用{3,7}?
制作非贪婪的广义量词!)
也许还要注意,非贪婪量词是正则表达式的一个相对较新的补充(在Perl 5中引入),并且在许多方言中根本不可用。