首页 » 精通正则表达式(第3版) » 精通正则表达式(第3版)全文在线阅读

《精通正则表达式(第3版)》PHP的正则流派

关灯直达底部

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中的空白字符。