PHP扩展之文本处理(二)——PCRE正则表达式语法7——内部选项设置
2014-11-07 00:00
1436 查看
PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_UNGREEDY,PCRE_EXTRA, PCRE_EXTENDED and PCRE_DUPNAMES 等模式修饰符设置可以在模式内部通过一个 perl 选项字符序列来设置, 语法为:(?修饰符),可用的修饰符有:
Internal option letters
i
for PCRE_CASELESS
m
for PCRE_MULTILINE
s
for PCRE_DOTALL
x
for PCRE_EXTENDED
U
for PCRE_UNGREEDY
X
for PCRE_EXTRA
J
for PCRE_INFO_JCHANGED
比如,(?im) 设置表明多行大小写不敏感匹配。同样可以用它来取消这些设置, 比如 (?im-sx) 设置了PCRE_CASELESS,PCRE_MULTILINE, 但是同时取消了 PCRE_DOTALL 和 PCRE_EXTENDED。 如果一个字母即出现在 - 之前, 也出现在 - 之后,这个选项被取消设置。
当一个选项在模式的最上级(也就是说不在子组中)时, 这个改变会影响模式中剩余部分。比如 /ab(?i)c/ 仅仅匹配 ”abc” 和 ”abC”。 这个形式在 PCRE 4.0(PHP 4.3.3) 中被改变。在此之前的版本中, /ab(?i)c/ 行为和 /abc/i 完全一致。
如果一个选项在子组中设置,产生的影响是不同的。这是 perl 5.005 中行为的一个变种。 一个选项在子组内部设置,仅仅改变子组中剩余的部分, 因此 (a(?i)b)c 仅仅匹配 ”abc” 和 ”aBc” (假设没有使用 PCRE_CASELESS 选项)。 这就意味着选项在模式的不同位置可以造成不同的影响。 在同一个子模式中, 一个分支的选项设置回穿透到后面剩余的其他分支中去。 比如 (a(?i)b|c) 匹配”ab”, “aB”, “c” 和 ”C”。 尽管在匹配 ”C” 时第一个分支会在选项被设定前就被丢弃。 这是因为选项的设定是在编译期确定的,否则可能会带来非常怪异的行为。
PCRE 专用选项 PCRE_UNGREEDY 和 PCRE_EXTRA 可以和 perl 兼容选项以同样的方式来改变, 分别使用字母 U 和 X. (?X) 标记设定有些特殊,它必须出现在任何其他特性之前, 最好放在最开头的位置。
Internal option letters
i
for PCRE_CASELESS
m
for PCRE_MULTILINE
s
for PCRE_DOTALL
x
for PCRE_EXTENDED
U
for PCRE_UNGREEDY
X
for PCRE_EXTRA
J
for PCRE_INFO_JCHANGED
比如,(?im) 设置表明多行大小写不敏感匹配。同样可以用它来取消这些设置, 比如 (?im-sx) 设置了PCRE_CASELESS,PCRE_MULTILINE, 但是同时取消了 PCRE_DOTALL 和 PCRE_EXTENDED。 如果一个字母即出现在 - 之前, 也出现在 - 之后,这个选项被取消设置。
当一个选项在模式的最上级(也就是说不在子组中)时, 这个改变会影响模式中剩余部分。比如 /ab(?i)c/ 仅仅匹配 ”abc” 和 ”abC”。 这个形式在 PCRE 4.0(PHP 4.3.3) 中被改变。在此之前的版本中, /ab(?i)c/ 行为和 /abc/i 完全一致。
如果一个选项在子组中设置,产生的影响是不同的。这是 perl 5.005 中行为的一个变种。 一个选项在子组内部设置,仅仅改变子组中剩余的部分, 因此 (a(?i)b)c 仅仅匹配 ”abc” 和 ”aBc” (假设没有使用 PCRE_CASELESS 选项)。 这就意味着选项在模式的不同位置可以造成不同的影响。 在同一个子模式中, 一个分支的选项设置回穿透到后面剩余的其他分支中去。 比如 (a(?i)b|c) 匹配”ab”, “aB”, “c” 和 ”C”。 尽管在匹配 ”C” 时第一个分支会在选项被设定前就被丢弃。 这是因为选项的设定是在编译期确定的,否则可能会带来非常怪异的行为。
PCRE 专用选项 PCRE_UNGREEDY 和 PCRE_EXTRA 可以和 perl 兼容选项以同样的方式来改变, 分别使用字母 U 和 X. (?X) 标记设定有些特殊,它必须出现在任何其他特性之前, 最好放在最开头的位置。
相关文章推荐
- PHP扩展之文本处理(二)——PCRE正则表达式语法4——Unicode字符属性
- PHP扩展之文本处理(二)——PCRE正则表达式语法9——重复/量词
- PHP扩展之文本处理(二)——PCRE正则表达式语法13——条件子组
- PHP扩展之文本处理(二)——PCRE正则表达式语法11——断言
- PHP扩展之文本处理(二)——PCRE正则表达式语法14——注释及递归模式
- PHP扩展之文本处理(二)——PCRE正则表达式语法2——元字符
- PHP扩展之文本处理(二)——PCRE正则表达式语法8——子组(子模式)
- PHP扩展之文本处理(二)——PCRE正则表达式语法10——后向引用
- PHP扩展之文本处理(二)——PCRE正则表达式语法5——锚和句点
- PHP扩展之文本处理(二)——PCRE正则表达式语法15——性能
- PHP扩展之文本处理(二)——PCRE正则表达式语法12——一次性子组
- PHP扩展之文本处理(二)——PCRE正则表达式语法6——字符类(方括号)和可选路径(|)
- PHP扩展之文本处理(二)——PCRE正则表达式语法3——转义序列(反斜线)
- PHP扩展之文本处理(二)——PCRE正则表达式语法1——分隔符
- PHP扩展之文本处理(三)——POSIX正则表达式函数及使用示例
- php中的PCRE 函数,正则表达式处理函数。
- perl/pcre正则表达式-选项/扩展模式
- 掌握 PHP 中的正则表达式,第 2 部分: 如何在 PHP 中处理文本