1、?不仅可以表示{0,1},而且表示“扩展模式”。
2、?加修饰符,通常模式选项置于其后,有四个选项:i、m、s、x可以内嵌使用,语法为:/(?option)pattern/,等价于/pattern/option
3、不存贮括号内的匹配内容
在PERL的模式中,括号内的子模式将存贮在内存中,即会产生$1、$2等,此功能即取消存贮该括号内的匹配内容,如/(?:a|b|c)(d|e)f\1/中的\1表示已匹配的d或e,而不是a或b或c,即不产生$1。
4、http://webdev.csdn.net/page/a1cfe1d9-566a-411a-a222-ecf75939f299
(?#text) 忽略括号内的注释文本;
(?:pattern) 与组一致,但匹配时不生成$1,$2;
(?imsx:pattern)
与组一致,但匹配时不生成$1,$2,在特定的风格有效期间,内嵌风格匹配修饰符;
(?=pattern)
前看声明,如果正则表达式在下一次匹配 pattern
风格,就开始匹配,而且不影响匹配效果。如/\w+(?=\t)/将匹配制表符是否恰好在一个字\w+后面出现,并且制表符不添加到$&的值中;
(?!pattern)
如果正则表达式在后面不匹配 pattern ,才会开始匹配。如/foo(?!bar)/,只有当出现 foo,并且后面不出现 bar
时才开始匹配;
(?<=pattern) 后看声明,只有在pattern已经匹配下面的表达式,并且不将 pattern
的结果放入$&变量中,才匹配下面的语句。如/(?<=\t)\W+/匹配制表符是否恰好在\W+前出现,但又不将制表符送到$&
中;
(? (?{code}) 表示对 code
的使用是试验性的。如果返回真,就认为是与(?:pattern)断言同一行里的匹配。code 不插入变量。这个断言仅仅在 use re
'eval' 编译指示符时才有效;
(?>pattern) 如果类型锁定在当前位置,就使用单独的 pattern
匹配子字符串。如正则表达式/^(?>a*)ab/永远不会匹配,因为语句(?>a*)将匹配字符串开头所有的 a 字符,并删除与 ab
匹配的字符 a;
(!<=pattern) 非后看声明,与后看声明意思相反;
(!=pattern)
非前看声明,与前看声明意思相反;
(?(condition)yes-pattern|no-pattern)
条件表达式——条件语句或者是一个圆括号中的整数,或者是一个断言;
(?(condition)yes-pattern)
(?imsx)
嵌入风格匹配修饰符。当要把表达式修改符嵌入在变量中,然后把变量用在不指定自己的修饰符的一般规则表达式中;
(?-imsx)
这个断言很有用——后面带任何内容都会关闭修饰符,直到出现另一个嵌入的修饰符。
8,向后引用
Perl的正则表达式引擎允许使用
前面匹配好的值,这些值叫做向后引用。
例如:
=~
m/(\w)\W*(\w)\W*(\w)\W*(\w)\W*\4\W*\3\W*\2\W*\1/;
=~
s/(\w)\W*(\w)\W*(\w)\W*(\w)/$4$3$2$1/;
阅读(1126) | 评论(0) | 转发(0) |