内部选项设置
发表日期:2021-07-01 08:57:01 | 来源: | | 浏览(494) 分类:PCRE 正则语法
内部选项设置
PCRE_CASELESS、 PCRE_MULTILINE、 PCRE_DOTALL、 PCRE_UNGREEDY、 PCRE_EXTRA、 PCRE_EXTENDED、 PCRE_DUPNAMES 等模式修饰符设置可以在模式内部通过一个 Perl 选项字符序列来设置, 语法是 (?修饰符),可用的修饰符有:
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”。
如果一个选项在子组中设置,产生的影响是不同的。这是 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(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 简介(0)
- 分隔符(0)
- 元字符(0)
- 转义序列(反斜线)(0)
- Unicode 字符属性(0)
- 锚(0)
- 句点(0)
- 字符类(方括号)(0)
- 可选路径(|)(0)
- 内部选项设置(0)
- 子组(子模式)(0)
- 重复/量词(0)
- 后向引用(0)
- 断言(0)
- 一次性子组(0)
- 条件子组(0)
- 注释(0)
- 递归模式(0)
- 性能(0)
- 数组 函数(81)
- 类/对象 函数(18)
- 函数处理 函数(13)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- 字符串 函数(101)