占有量词的基本用法

占有量词是许多正则表达式中的另一类量词,它允许对给定令牌进行有效的回溯。这有助于提高性能,并在某些情况下防止匹配。

通过在量词之后添加+,可以将占有量词的类别与懒惰或贪婪量词区分开来,如下所示:

量词 贪婪 所有格
零或更多 * *? *+
一个或多个 + +? ++
零或一 ? ?? ?+

例如,考虑两个模式 .*.*+,在字符串 "abc"d 上运行。在这两种情况下,字符串开头的 " 都匹配,但在此之后,这两种模式将具有不同的行为和结果。

然后,贪婪的量词将扼杀其余的弦,abc"d。因为这与模式不匹配,所以它将回溯并丢弃 d,留下包含 abc"量词。因为这仍然与模式不匹配,量词会降低 ",只留下 abc。这与模式匹配(因为 " 由文字而不是量词匹配),正则表达式报告成功。

占有量词也会扼杀字符串的其余部分,但是,与贪婪的量词不同,它不会回溯。由于其内容 abc"d 不允许匹配模式的其余部分,正则表达式将停止并报告失败匹配。

因为占有量词不进行回溯,所以它们可以导致长或复杂模式的显着性能提升。然而,如果人们不知道量词如何在内部工作,它们就会变得危险(如上所述)。