PHP 正则表达式 修饰符

下面列出了当前可用的 PCRE 修饰符。括号中提到的名字是 PCRE 内部这些修饰符的名称。 模式修饰符中的空格,换行符会被忽略,其余字符会致使错误。php

 

i ( PCRE_CASELESS)
若是设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
m ( PCRE_MULTILINE)
默认状况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), "行首"元字符 (^) 仅匹配字符串的开始位置, 而"行末"元字符 ($) 仅匹配字符串末尾, 或者最后的换行符(除非设置了 D 修饰符)。这个行为和 perl 相同。 当这个修饰符设置以后,“行首”和“行末”就会匹配目标字符串中任意换行符以前或以后,另外, 还分别匹配目标字符串的最开始和最末尾位置。这等同于 perl 的 /m 修饰符。若是目标字符串 中没有 "\n" 字符,或者模式中没有出现 ^ 或 $,设置这个修饰符不产生任何影响。
s ( PCRE_DOTALL)
若是设置了这个修饰符,模式中的点号元字符匹配全部字符,包含换行符。若是没有这个 修饰符,点号不匹配换行符。这个修饰符等同于 perl 中的/s修饰符。 一个取反字符类好比 [^a] 老是匹配换行符,而不依赖于这个修饰符的设置。
x ( PCRE_EXTENDED)
若是设置了这个修饰符,模式中的没有通过转义的或不在字符类中的空白数据字符总会被忽略, 而且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符 等同于 perl 中的 /x 修饰符,使被编译模式中能够包含注释。 注意:这仅用于数据字符。 空白字符 仍是不能在模式的特殊字符序列中出现,好比序列 (?( 引入了一个条件子组(译注: 这种语法定义的 特殊字符序列中若是出现空白字符会致使编译错误。 好比(?(就会致使错误)。
A ( PCRE_ANCHORED)
若是设置了这个修饰符,模式被强制为"锚定"模式,也就是说约束匹配使其仅从 目标字符串的开始位置搜索。这个效果一样可使用适当的模式构造出来,而且 这也是 perl 种实现这种模式的惟一途径。
D ( PCRE_DOLLAR_ENDONLY)
若是这个修饰符被设置,模式中的元字符美圆符号仅仅匹配目标字符串的末尾。若是这个修饰符 没有设置,当字符串以一个换行符结尾时, 美圆符号还会匹配该换行符(但不会匹配以前的任何换行符)。 若是设置了修饰符m,这个修饰符被忽略. 在 perl 中没有与此修饰符等同的修饰符。
S
当一个模式须要屡次使用的时候,为了获得匹配速度的提高,值得花费一些时间 对其进行一些额外的分析。若是设置了这个修饰符,这个额外的分析就会执行。当前, 这种对一个模式的分析仅仅适用于非锚定模式的匹配(即没有单独的固定开始字符)。
U ( PCRE_UNGREEDY)
这个修饰符逆转了量词的"贪婪"模式。 使量词默认为非贪婪的,经过量词后紧跟? 的方式可使其成为贪婪的。这和 perl 是不兼容的。 它一样可使用 模式内修饰符设置 (?U)进行设置, 或者在量词后以问号标记其非贪婪(好比.*?)。

 

X ( PCRE_EXTRA)
这个修饰符打开了 PCRE 与 perl 不兼容的附件功能。模式中的任意反斜线后就 ingen 一个 没有特殊含义的字符都会致使一个错误,以此保留这些字符以保证向后兼容性。 默认状况下,在 perl 中,反斜线紧跟一个没有特殊含义的字符被认为是该字符的原文。 当前没有其余特性由这个修饰符控制。
J ( PCRE_INFO_JCHANGED)
内部选项设置(?J)修改本地的PCRE_DUPNAMES选项。容许子组重名, (译注:只能经过内部选项设置,外部的 /J 设置会产生错误。)
u ( PCRE_UTF8)
此修正符打开一个与 perl 不兼容的附加功能。 模式字符串被认为是utf-8的. 这个修饰符 从 unix 版php 4.1.0 或更高,win32版 php 4.2.3 开始可用。 php 4.3.5 开始检查模式的 utf-8 合法性。
相关文章
相关标签/搜索