PCRE_CASELESS、 PCRE_MULTILINE、 PCRE_DOTALL、 PCRE_UNGREEDY、 PCRE_EXTRA、 PCRE_EXTENDED、 PCRE_DUPNAMES 等模式修飾符設(shè)置可以在模式內(nèi)部通過(guò)一個(gè) Perl 選項(xiàng)字符序列來(lái)設(shè)置, 語(yǔ)法是 (?修飾符),可用的修飾符有:
i |
for PCRE_CASELESS |
m |
for PCRE_MULTILINE |
s |
for PCRE_DOTALL |
x |
for PCRE_EXTENDED |
U |
for PCRE_UNGREEDY |
X |
for PCRE_EXTRA |
J |
for PCRE_INFO_JCHANGED |
比如,(?im) 設(shè)置表明多行大小寫(xiě)不敏感匹配。同樣可以用它來(lái)取消這些設(shè)置, 比如 (?im-sx) 設(shè)置了 PCRE_CASELESS,PCRE_MULTILINE, 但是同時(shí)取消了 PCRE_DOTALL 和 PCRE_EXTENDED。 如果一個(gè)字母即出現(xiàn)在 - 之前, 也出現(xiàn)在 - 之后,這個(gè)選項(xiàng)被取消設(shè)置。
當(dāng)一個(gè)選項(xiàng)在模式的最上級(jí)(也就是說(shuō)不在子組中)時(shí),
這個(gè)改變會(huì)影響模式中剩余部分。比如 /ab(?i)c/
僅僅匹配 ”abc” 和 ”abC”。
如果一個(gè)選項(xiàng)在子組中設(shè)置,產(chǎn)生的影響是不同的。這是 Perl 5.005 中行為的一個(gè)變種。
一個(gè)選項(xiàng)在子組內(nèi)部設(shè)置,僅僅改變子組中剩余的部分,
因此 (a(?i)b)c
僅僅匹配 ”abc” 和 ”aBc” (假設(shè)沒(méi)有使用
PCRE_CASELESS 選項(xiàng))。
這就意味著選項(xiàng)在模式的不同位置可以造成不同的影響。
在同一個(gè)子模式中,
一個(gè)分支的選項(xiàng)設(shè)置回穿透到后面剩余的其他分支中去。
比如 (a(?i)b|c)
匹配”ab”,
“aB”, “c” 和 ”C”。 盡管在匹配 ”C” 時(shí)第一個(gè)分支會(huì)在選項(xiàng)被設(shè)定前就被丟棄。
這是因?yàn)檫x項(xiàng)的設(shè)定是在編譯期確定的,否則可能會(huì)帶來(lái)非常怪異的行為。
PCRE 專(zhuān)用選項(xiàng) PCRE_UNGREEDY 和 PCRE_EXTRA 可以和 Perl 兼容選項(xiàng)以同樣的方式來(lái)改變, 分別使用字母 U 和 X。 (?X) 標(biāo)記設(shè)定有些特殊,它必須出現(xiàn)在任何其他特性之前, 最好放在最開(kāi)頭的位置。