PHP扩展之文本处理(二)——PCRE正则表达式模式修饰符
2014-11-07 00:00
1196 查看
下面列出了当前可用的 PCRE 修饰符。括号中提到的名字是 PCRE 内部这些修饰符的名称。 模式修饰符中的空格,换行符会被忽略,其他字符会导致错误。
i (PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
m (PCRE_MULTILINE)
默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), "行首"元字符 (^) 仅匹配字符串的开始位置, 而"行末"元字符 ($) 仅匹配字符串末尾, 或者最后的换行符(除非设置了 D 修饰符)。这个行为和 perl 相同。 当这个修饰符设置之后,“行首”和“行末”就会匹配目标字符串中任意换行符之前或之后,另外, 还分别匹配目标字符串的最开始和最末尾位置。这等同于 perl 的 /m 修饰符。如果目标字符串 中没有 "\n" 字符,或者模式中没有出现 ^ 或 $,设置这个修饰符不产生任何影响。
s (PCRE_DOTALL)
如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个 修饰符,点号不匹配换行符。这个修饰符等同于 perl 中的/s修饰符。 一个取反字符类比如 [^a] 总是匹配换行符,而不依赖于这个修饰符的设置。
x (PCRE_EXTENDED)
如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略, 并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符 等同于 perl 中的 /x 修饰符,使被编译模式中可以包含注释。 注意:这仅用于数据字符。 空白字符 还是不能在模式的特殊字符序列中出现,比如序列 (?( 引入了一个条件子组(译注: 这种语法定义的 特殊字符序列中如果出现空白字符会导致编译错误。 比如(?(就会导致错误)。
e (PREG_REPLACE_EVAL)
如果这个修饰符设置了, preg_replace() 在进行了对替换字符串的 后向引用替换之后, 将替换后的字符串作为php 代码评估执行(eval 函数方式),并使用执行结果 作为实际参与替换的字符串。单引号、双引号、反斜线(\)和 NULL 字符在 后向引用替换时会被用反斜线转义.
注意:请确保 replacement 参数由合法 php 代码字符串组成,否则 php 将会 在 preg_replace() 调用的行上产生一个解释错误。仅 preg_replace() 使用此修饰符,其他 PCRE 函数忽略此修饰符。
i (PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
m (PCRE_MULTILINE)
默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), "行首"元字符 (^) 仅匹配字符串的开始位置, 而"行末"元字符 ($) 仅匹配字符串末尾, 或者最后的换行符(除非设置了 D 修饰符)。这个行为和 perl 相同。 当这个修饰符设置之后,“行首”和“行末”就会匹配目标字符串中任意换行符之前或之后,另外, 还分别匹配目标字符串的最开始和最末尾位置。这等同于 perl 的 /m 修饰符。如果目标字符串 中没有 "\n" 字符,或者模式中没有出现 ^ 或 $,设置这个修饰符不产生任何影响。
s (PCRE_DOTALL)
如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个 修饰符,点号不匹配换行符。这个修饰符等同于 perl 中的/s修饰符。 一个取反字符类比如 [^a] 总是匹配换行符,而不依赖于这个修饰符的设置。
x (PCRE_EXTENDED)
如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略, 并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符 等同于 perl 中的 /x 修饰符,使被编译模式中可以包含注释。 注意:这仅用于数据字符。 空白字符 还是不能在模式的特殊字符序列中出现,比如序列 (?( 引入了一个条件子组(译注: 这种语法定义的 特殊字符序列中如果出现空白字符会导致编译错误。 比如(?(就会导致错误)。
e (PREG_REPLACE_EVAL)
如果这个修饰符设置了, preg_replace() 在进行了对替换字符串的 后向引用替换之后, 将替换后的字符串作为php 代码评估执行(eval 函数方式),并使用执行结果 作为实际参与替换的字符串。单引号、双引号、反斜线(\)和 NULL 字符在 后向引用替换时会被用反斜线转义.
注意:请确保 replacement 参数由合法 php 代码字符串组成,否则 php 将会 在 preg_replace() 调用的行上产生一个解释错误。仅 preg_replace() 使用此修饰符,其他 PCRE 函数忽略此修饰符。
相关文章推荐
- PHP扩展之文本处理(二)——PCRE正则表达式语法2——元字符
- PHP扩展之文本处理(二)——PCRE正则表达式语法7——内部选项设置
- PHP扩展之文本处理(二)——PCRE正则表达式语法3——转义序列(反斜线)
- PHP扩展之文本处理(二)——PCRE正则表达式语法15——性能
- PHP扩展之文本处理(二)——PCRE正则表达式语法5——锚和句点
- PHP扩展之文本处理(二)——PCRE正则表达式语法13——条件子组
- PHP扩展之文本处理(二)——PCRE正则表达式语法9——重复/量词
- PHP扩展之文本处理(二)——PCRE正则表达式语法6——字符类(方括号)和可选路径(|)
- PHP扩展之文本处理(二)——PCRE正则表达式语法11——断言
- PHP扩展之文本处理(二)——PCRE正则表达式语法12——一次性子组
- PHP扩展之文本处理(二)——PCRE正则表达式语法10——后向引用
- PHP扩展之文本处理(二)——PCRE正则表达式语法8——子组(子模式)
- PHP扩展之文本处理(二)——PCRE正则表达式语法4——Unicode字符属性
- PHP扩展之文本处理(二)——PCRE正则表达式语法1——分隔符
- PHP扩展之文本处理(二)——PCRE正则表达式语法14——注释及递归模式
- PHP扩展之文本处理(一)——字符串及字符串函数大全
- PHP扩展之文本处理(三)——POSIX正则表达式函数及使用示例
- php基础系列:从用户登录处理程序学习mysql扩展基本操作