PHP的正则流派

04-13Ctrl+D 收藏本站

关灯 直达底部

PHP's Regex Flavor

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

前页的表10-1简要介绍了preg引擎的正则流派。下面是补充说明:

① 只有在字符组内部,\b才表示退格符。在其他场合,\b匹配单词分界符(☞133)。

十进制转义只能使用两到三位八位数值。特殊的一位数「\0」序列匹配空字节(NUL byte)。

「\xhex」容许出现一到两位十六进制数字,而「\x{hex}」容许任意多个数字。请注意,大于\x{FF}的数值只能与模式修饰符u连用(☞447)。如果没有模式修饰符u,大于\x{FF}的值会导致正则表达式非法。

② 即使是在UTF-8模式下(通过模式修饰符u),单词分界符和字符组简记法,例如「\w」,也只对ASCII字符起作用。如果需要处理所有的Unicode字符,请使用「\pL」(☞121)代替「\w」,用「\pN」代替「\d」,用「\pZ」代替「\s」。

③ 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}」(表示任意字符)。

④ 在默认情况下,preg 套件的正则表达式是以字节为单位的,所以「\C」默认就等价于「(?s:.)」,由 s修饰的点号。不过,如果使用了修饰符 u,则preg 套件就会以UTF-8字母为单位,也就是说,一个字符可能由6个字节组成。即使这样,「\C」仍然匹配单个字节。请参考第120页的注意事项。

⑤ 「\z」和「\Z」都能够匹配字符串的末尾,而「\Z」同样能够匹配最后的换行符。

「$」的意义取决于模式修饰符m和D(☞446):如果没有设定任何修饰符,「$」等价于「\Z」(在字符串结尾的换行符,或者是字符串结尾);如果使用了 m,则它能够匹配内嵌的换行符,如果使用了模式修饰符 D,它能够匹配「\z」(只有在字符串的结尾)。如果同时设置了m和D,则忽略D。

⑥ 逆序环视中使用的子表达式只能匹配固定长度的文本,除非顶层多选分支容许不同的固定长度(☞133)。

⑦ 模式修饰符x(自由格式和注释)只能识别ASCII的空白字符,不能识别Unicode中的空白字符。