TPerlRegEx.Options (集合型別) 與 State 控制正則引擎的匹配行為,掌握這些選項是編寫高效正則的關鍵。
reg.Options := [preCaseLess];
{ 相當於其他語言的 /i 模式 }
reg.Options := [preAnchored];
{ 相當於 ^,但更嚴格:任何情況下只匹配字串最開頭 }
reg.Options := [preDollarEndOnly];
{ 禁用 $ 在多行模式下匹配行尾 }
reg.Options := [preMultiLine];
{ 相當於 /m:^/$ 匹配每行開頭/結尾 }
reg.Options := [preSingleLine];
{ 相當於 /s:. 匹配任意字元含換行 }
reg.Options := [preUnGreedy];
{ 全域啟用非貪婪,等同於所有量詞加 ? }
reg.Options := [preExtended];
{ 忽略模式中的空白;# 至行尾視為註解;空白需用 \x20 表示 }
| State 值 | 效果 |
|---|---|
preNotBOL | 讓 ^ (行首) 失效 |
preNotEOL | 讓 $ (行尾) 失效 |
preNotEmpty | 空字串不匹配 (具體行為需實測) |
{ 同時啟用:不區分大小寫 + 多行 + 單行 }
reg.Options := [preCaseLess, preMultiLine, preSingleLine];
{ 同時禁用:行首錨點 + 行尾錨點 }
reg.State := [preNotBOL, preNotEOL];
preAnchored 永遠只匹配字串絕對開頭^ 在 preMultiLine 下還匹配每行開頭^ 在字元類別 [^...] 中表示排除\x20 (空格)、\t (Tab)# 至行尾視為註解被忽略# 時用 \#(?#...) 不受 preExtended 影響熟練組合這些選項,能讓正則表達式更精準、更易讀、更高效。