佔有量詞的基本用法
佔有量詞是許多正規表示式中的另一類量詞,它允許對給定令牌進行有效的回溯。這有助於提高效能,並在某些情況下防止匹配。
通過在量詞之後新增+,可以將佔有量詞的類別與懶惰或貪婪量詞區分開來,如下所示:
| 量詞 | 貪婪 | 懶 | 所有格 |
|---|---|---|---|
| 零或更多 | * |
*? |
*+ |
| 一個或多個 | + |
+? |
++ |
| 零或一 | ? |
?? |
?+ |
例如,考慮兩個模式 .* 和 .*+,在字串 "abc"d 上執行。在這兩種情況下,字串開頭的 " 都匹配,但在此之後,這兩種模式將具有不同的行為和結果。
然後,貪婪的量詞將扼殺其餘的弦,abc"d。因為這與模式不匹配,所以它將回溯並丟棄 d,留下包含 abc" 的量詞。因為這仍然與模式不匹配,量詞會降低 ",只留下 abc。這與模式匹配(因為 " 由文字而不是量詞匹配),正規表示式報告成功。
佔有量詞也會扼殺字串的其餘部分,但是,與貪婪的量詞不同,它不會回溯。由於其內容 abc"d 不允許匹配模式的其餘部分,正規表示式將停止並報告失敗匹配。
因為佔有量詞不進行回溯,所以它們可以導致長或複雜模式的顯著效能提升。然而,如果人們不知道量詞如何在內部工作,它們就會變得危險(如上所述)。