首頁  >  文章  >  後端開發  >  php—PCRE正規表示式錨和句點

php—PCRE正規表示式錨和句點

伊谢尔伦
伊谢尔伦原創
2016-11-21 17:24:071108瀏覽

在一個字元類別外面,在預設匹配模式下, ^ 是一個斷言當前匹配點位於目標字串開始處的斷言。在一個字元類別內部, ^ 顯示這個字元類別中所描述的字元取反(詳見下文)。

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

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

$ 的意義可以透過在編譯或配對時設定 PCRE_DOLLAR_ENDONLY 改變為只符合字串結尾。 這不會影響 Z 斷言的行為。

^ 和 $ 字元的意義在 PCRE_MULTILINE 選項設定時會改變。 當在這種情況下時, 它們匹配每一個換行符後面的和前面的字符,另外, 也會匹配目標字串的開始和結束。例如, 模式 /^abc$/ 在多行模式下會成功匹配目標字串 ”defnabc”, 而正常情況下不會。因此,由於所有的可選分支都以 ^ 開始, 在單行模式下這成為緊固模式,然而在多行模式下,這是非緊固的。 PCRE_DOLLAR_ENDONLY 選項在PCRE_MULTILINE 設定後失效。

注意: A、Z、 z 等轉義序列可以在任何模式下用於匹配目標字串的開始和結束位置。 而如果模式的所有分支都以 A 開始,它同樣是緊固的, 而與 PCRE_MULTILINE 是否設定無關。

句點

在字符類外部,模式中的句點匹配目標字符串中的任意字符,包括非打印字符, 但是(默認)不包括換行符。如果 PCRE_DOTALL 被設置,句點就會匹配換行符。 句點的處理和^、$的處理沒有關聯,它們唯一的關係是它們都涉及了換行符。 句點在字元類別中沒有任何意義。

C可以被用來匹配單字節, 也就是說在UTF-8模式下,句點可以匹配多位元組字元。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn