有人可以向我解释占有量词吗?(常用表达)

Che*_*eso 15 regex pcre

我正在阅读PCRE文档,它指的是占有量词,但没有明确或具体地定义它们.我知道贪婪的量词是什么,我知道什么是懒惰的量化器.但占有欲?

PCRE手册页似乎当使用术语而不定义它被欺骗.该手册页特别指出术语占有量词首先在Friedl的书中定义.嗯,这很好,但是我没有Friedl的书,在阅读手册页之间,我无法弄清楚占有量词与贪婪词的区别.

  • ?=零或一,贪心
  • ?? =零或一,懒惰
  • ?+ =零或一,占有欲
  • '+'=一个或多个,贪心
  • +?=一个或多个,懒惰
  • ++ =一个或多个,占有欲

And*_*are 13

也许最好的起点是Regex Tutorial - Possessive Quantifiers:

在讨论重复操作符或量词时,我解释了贪婪和懒惰重复之间的区别.贪婪和懒惰决定了正则表达式引擎尝试正则表达式模式的可能排列的顺序.贪婪的量词将首先尝试尽可能多地重复令牌,并逐渐放弃匹配,因为引擎回溯以找到整体匹配.懒惰量词将首先根据需要重复令牌次数,并在引擎通过正则表达式回溯以找到整体匹配时逐渐扩展匹配.


占有量词是防止正则表达式引擎尝试所有排列的一种方法.这主要是出于性能原因.您还可以使用占有量词来消除某些匹配.

  • 啊,我明白了!看完那个教程后,在我看来懒惰并不是贪婪的对立面.懒惰应该被称为"慷慨",占有式形式实际上应该被称为懒惰,因为占有量词拒绝回溯.他们不会做任何额外的工作,这只是懒惰. (10认同)
  • 占有量词拒绝回溯 - 这是我读到的最好的解释.谢谢你总结一下:) (5认同)