PHP中对于正则处理文本提供了两种方式,一种是PCRE方式(PCRE库是一个实现了与perl 5在语法和语义上略有差异(详见下文)的正则表达式模式匹配功能的函数集. 当前的实现对应于perl 5.005.);另一个是POSIX方式。PCRE 函数库中的函数使用的模式语法非常类似perl. 表达式必须用分隔符闭合,比如一个正斜杠(/). 分隔符可以使任意非字母数字,除反斜杠()和空字节之外的非空白ascii字符. 如果分隔符 在表达式中使用,需要使用反斜线进行转义. 自PHP 4.0.4开始,可以使用perl样式的(),{},[]以及<>作为分隔符. 更详细的解释参见模式语法.结束分隔符后面可以紧跟模式修饰符来影响匹配效果. 参见模式修饰符.
<FONT style="COLOR: #0000ff">PCRE的模式修正符
i (PCRE_CASELESS)
如果设定此修正符,模式中的字符将同时匹配大小写字母。s(PCRE_DOTALL)
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符。m(PCRE_MULTILINE)
默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)。这和 Perl 是一样的。当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。x (PCRE_EXTENDED)
如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略,并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略. 这个修饰符 等同于perl中的/x修饰符,使被编译模式中可以包含注释. 注意: 这仅用于数据字符. 空白字符 还是不能在模式的特殊字符序列中出现,比如序列(?(引入了一个条件子组(译注: 这种语法定义的 特殊字符序列中如果出现空白字符会导致编译错误. 比如( ?(就会导致错误.).e (PREG_REPLACE_EVAL)
如果这个修饰符设置了,preg_replace()在进行了对替换字符串的 后向引用替换之后,将替换后的字符串作为PHP代码评估之行(eval函数方式),并使用之行结果 作为实际参与替换的字符串. 单引号,双引号,反斜线()和NULL字符在 后向引用替换时会被用反斜线转义.<FONT style="COLOR: #ff0000">仅preg_replace()使用此修饰符,其他PCRE函数忽略此修饰符.