佔有量詞的基本用法

佔有量詞是許多正規表示式中的另一類量詞,它允許對給定令牌進行有效的回溯。這有助於提高效能,並在某些情況下防止匹配。

通過在量詞之後新增+,可以將佔有量詞的類別與懶惰或貪婪量詞區分開來,如下所示:

量詞 貪婪 所有格
零或更多 * *? *+
一個或多個 + +? ++
零或一 ? ?? ?+

例如,考慮兩個模式 .*.*+,在字串 "abc"d 上執行。在這兩種情況下,字串開頭的 " 都匹配,但在此之後,這兩種模式將具有不同的行為和結果。

然後,貪婪的量詞將扼殺其餘的弦,abc"d。因為這與模式不匹配,所以它將回溯並丟棄 d,留下包含 abc"量詞。因為這仍然與模式不匹配,量詞會降低 ",只留下 abc。這與模式匹配(因為 " 由文字而不是量詞匹配),正規表示式報告成功。

佔有量詞也會扼殺字串的其餘部分,但是,與貪婪的量詞不同,它不會回溯。由於其內容 abc"d 不允許匹配模式的其餘部分,正規表示式將停止並報告失敗匹配。

因為佔有量詞不進行回溯,所以它們可以導致長或複雜模式的顯著效能提升。然而,如果人們不知道量詞如何在內部工作,它們就會變得危險(如上所述)。