我理解.*
(贪婪量词)回溯并试图找到匹配。而.*+
(占有量词)并没有回溯。
但我经常使用.*
和.\*?
,但不知道何时使用.*+
。
有人可以提供应该使用.*+
的情况或示例吗?
以一个例子的解释表示赞赏。
编辑:
我已经完成了理论部分,我重复了解它是如何工作的。我只需要一个匹配占有量词(.*+
)
答案 0 :(得分:2)
有许多(依赖于正则表达式)的实现细节,因此很难概括这些内容。例如,使用^.*.+
,您可以在字符串" "
上获得匹配。使用^.*+.+
,您不会。因为第一个匹配器已经吞噬了整个空格。
您可以在任何不希望正则表达式的下一部分意外匹配前面部分的情况下使用它。
处的PCRE设置对此进行测试答案 1 :(得分:0)
请注意,如果占有性模式匹配,那么贪婪模式也是如此。相反的情况并非如此。因此,如果要将匹配限制为较小的集合,则可以使用占有量词。
当输入字符串与您的模式不匹配时,占有量词很有用。由于他们“吃掉”他们的输入并且没有回溯,他们将更快地检测到不匹配。在极端情况下,这称为catastrophic backtracking并且已经关闭了网站(包括StackOverflow,请参阅here)。