在一個(gè)字符類(lèi)外面,在默認匹配模式下,
脫字符(^
) 是一個(gè)斷言當前匹配點(diǎn)位于目標字符串開(kāi)始處的斷言。
在一個(gè)字符類(lèi)內部,
脫字符(^
) 表明這個(gè)字符類(lèi)中描述的字符取反(詳見(jiàn)下文)。
脫字符(^
)并不一定要是模式的第一個(gè)字符, 但是如果處于某個(gè)可選分支時(shí),
它應該是該分支的首字符。如果所有選擇分支都以脫字符(^
)開(kāi)頭,這就是說(shuō),
如果模式限制為只匹配目標的開(kāi)頭,
它被稱(chēng)為是一個(gè) ”緊固” 模式。(同樣也有其他方式可以構造出緊固模式)
美元符($
)是用于斷言當前匹配點(diǎn)位于目標字符串末尾,
或當目標字符串以換行符結尾時(shí)當前匹配點(diǎn)位于該換行符位置(默認情況)。
美元符($
)不一定要作為模式的最后一個(gè)字符,但是如果它在某個(gè)可選分支中時(shí),
就應該位于該分支的末尾。美元符在字符類(lèi)中沒(méi)有特殊的意義。
$
的意義可以通過(guò)在編譯或匹配時(shí)設置 PCRE_DOLLAR_ENDONLY 改變?yōu)橹黄ヅ渥址┪病? 這不會(huì )影響 \Z 斷言的行為。
脫字符 ^
和美元符 $
字符的意義在
PCRE_MULTILINE 選項被設置時(shí)會(huì )發(fā)生變化。 當在這種情況下時(shí),
它們匹配每一個(gè)換行符后面的和前面的字符,另外,
也會(huì )匹配目標字符串的開(kāi)始和結束。比如,
模式 /^abc$/ 在多行模式下會(huì )成功匹配目標字符串 ”def\nabc”,
而正常情況下不會(huì )。因此,由于所有的可選分支都以 "^" 開(kāi)始,
在單行模式下這成為緊固模式,然而在多行模式下,這是非緊固的。
PCRE_DOLLAR_ENDONLY
選項在 PCRE_MULTILINE
設置后失效。
注意: \A、\Z、 \z 等轉義序列可以在任何模式下用于匹配目標字符串的開(kāi)始和結束位置。 并且如果模式的所有分支都以 \A 開(kāi)始,它同樣是緊固的, 而與 PCRE_MULTILINE 是否設置無(wú)關(guān)。