在一個字符類外面,在默認匹配模式下, 脫字符(^) 是一個斷言當前匹配點位于目標字符串開始處的斷言。 在一個字符類內(nèi)部, 脫字符(^) 表明這個字符類中描述的字符取反(詳見下文)。

脫字符(^)并不一定要是模式的第一個字符, 但是如果處于某個可選分支時, 它應(yīng)該是該分支的首字符。如果所有選擇分支都以脫字符(^)開頭,這就是說, 如果模式限制為只匹配目標的開頭, 它被稱為是一個 ”緊固” 模式。(同樣也有其他方式可以構(gòu)造出緊固模式)

美元符($)是用于斷言當前匹配點位于目標字符串末尾, 或當目標字符串以換行符結(jié)尾時當前匹配點位于該換行符位置(默認情況)。 美元符($)不一定要作為模式的最后一個字符,但是如果它在某個可選分支中時, 就應(yīng)該位于該分支的末尾。美元符在字符類中沒有特殊的意義。

$ 的意義可以通過在編譯或匹配時設(shè)置 PCRE_DOLLAR_ENDONLY 改變?yōu)橹黄ヅ渥址┪病? 這不會影響 \Z 斷言的行為。

脫字符 ^ 和美元符 $ 字符的意義在 PCRE_MULTILINE 選項被設(shè)置時會發(fā)生變化。 當在這種情況下時, 它們匹配每一個換行符后面的和前面的字符,另外, 也會匹配目標字符串的開始和結(jié)束。比如, 模式 /^abc$/ 在多行模式下會成功匹配目標字符串 ”def\nabc”, 而正常情況下不會。因此,由于所有的可選分支都以 "^" 開始, 在單行模式下這成為緊固模式,然而在多行模式下,這是非緊固的。 PCRE_DOLLAR_ENDONLY 選項在 PCRE_MULTILINE 設(shè)置后失效。

注意: \A、\Z、 \z 等轉(zhuǎn)義序列可以在任何模式下用于匹配目標字符串的開始和結(jié)束位置。 并且如果模式的所有分支都以 \A 開始,它同樣是緊固的, 而與 PCRE_MULTILINE 是否設(shè)置無關(guān)。