讀古今文學網 > 精通正則表達式(第3版) > PHP的正則流派 >

PHP的正則流派

PHP's Regex Flavor

表10-1:PHP preg的正則流派

前頁的表10-1簡要介紹了preg引擎的正則流派。下面是補充說明:

1 只有在字符組內部,\b才表示退格符。在其他場合,\b匹配單詞分界符(☞133)。

十進制轉義只能使用兩到三位八位數值。特殊的一位數「\0」序列匹配空字節(NUL byte)。

「\xhex」容許出現一到兩位十六進制數字,而「\x{hex}」容許任意多個數字。請注意,大於\x{FF}的數值只能與模式修飾符u連用(☞447)。如果沒有模式修飾符u,大於\x{FF}的值會導致正則表達式非法。

2 即使是在UTF-8模式下(通過模式修飾符u),單詞分界符和字符組簡記法,例如「\w」,也只對ASCII字符起作用。如果需要處理所有的Unicode字符,請使用「\pL」(☞121)代替「\w」,用「\pN」代替「\d」,用「\pZ」代替「\s」。

3 Unicode支持針對Unicode Version 4.1.0。

Unicode字母表(☞122)的支持不需要任何『Is』或者『In』前綴,例如「\p{Cyrillic}」。

PHP 同時支持單字母或雙字母Unicode 屬性,例如「\p{Lu}」、「\p{L}」,其中「\pL」作為單字母屬性名(☞121)。而不支持「\p{Letter}」之類的長名稱。

PHP也支持特殊的「\p{L&}」(☞121),以及「\p{Any}」(表示任意字符)。

4 在默認情況下,preg 套件的正則表達式是以字節為單位的,所以「\C」默認就等價於「(?s:.)」,由 s修飾的點號。不過,如果使用了修飾符 u,則preg 套件就會以UTF-8字母為單位,也就是說,一個字符可能由6個字節組成。即使這樣,「\C」仍然匹配單個字節。請參考第120頁的注意事項。

5 「\z」和「\Z」都能夠匹配字符串的末尾,而「\Z」同樣能夠匹配最後的換行符。

「$」的意義取決於模式修飾符m和D(☞446):如果沒有設定任何修飾符,「$」等價於「\Z」(在字符串結尾的換行符,或者是字符串結尾);如果使用了 m,則它能夠匹配內嵌的換行符,如果使用了模式修飾符 D,它能夠匹配「\z」(只有在字符串的結尾)。如果同時設置了m和D,則忽略D。

6 逆序環視中使用的子表達式只能匹配固定長度的文本,除非頂層多選分支容許不同的固定長度(☞133)。

7 模式修飾符x(自由格式和註釋)只能識別ASCII的空白字符,不能識別Unicode中的空白字符。