.*
(贪婪量词(回溯并试图找到匹配项。 并且.*+
(所有格量词(不会回溯。
但是我一直在使用.*
并且经常使用.*?
,但不知道何时使用.*+
。
有人可以举一个应该使用.*+
的情况或例子吗?
感谢举例说明。
编辑:
我已经完成了理论部分,我再说一遍,我理解它是如何工作的。 我只需要一个匹配所有格量词的示例(.*+
(
有许多(依赖于正则表达式的(实现细节,因此很难概括这些东西。例如,使用 ^.*.+
您会在字符串 " "
上获得匹配项。有了^.*+.+
你就不会。因为第一个匹配器已经吞下了整串空白。
您可以在不希望正则表达式的下一部分意外匹配前一部分的任何情况下使用它。
您可以使用 PCRE 设置对此进行测试 https://regex101.com/
请注意,如果所有格模式匹配,那么贪婪模式也会匹配。反之则不然。因此,如果要将匹配项限制为较小的集合,则可以使用所有格量词。
其次,当输入字符串与您的模式不匹配时,所有格量词很有用。由于它们"吃掉"了他们的输入并且不会回溯,因此它们将更快地检测到不匹配。在极端情况下,这被称为灾难性回溯,并导致站点关闭(包括StackOverflow,见这里(。