正则表达式扩展语法:预搜索
预搜索(令宽度断言)
判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。
说明
预搜索有向前和向后两种:
表达式
方向
说明
(?=xxx)
正向预搜索(向右)
正向预搜索,判断当前位置右侧是否能匹配指定表达式
(?!xxx)
正向预搜索否定,判断当前位置右侧是否不能够匹配指定表达式
(?<=xxx)
反向预搜索(向左)
反向预搜索,判断当前位置左侧是否能够匹配指定表达式
(?<!xxx)
反向预搜索否定,判断当前位置左侧是否不能够匹配指定表达式
在 DEELX 中,不管整个表达式是“普通模式”还是“从右向左”模式,正向预搜索内部的表达式,始终采用“普通模式(从左向右)”模式,反向预搜索内部的表达式,始终采用“从右向左”模式。
“正向预搜索”在各个引擎中的表现基本一致。
关于“反向预搜索”中包含的表达式,Perl, Java, GRETA 以及 DEELX 的细节都不相同:
引擎
说明
举例
Perl
只能使用固定长度的反向预搜索。
(?<=t)print
Java
允许使用不定长度的反向预搜索,但必须要有最大长度。
(?<={s{0,100})print
GRETA
允许使用没有长度限制,但否定格式存在一些问题。
(?<={s*)print
DEELX 中的反向预搜索:
DEELX 采用 RIGHTTOLEFT 模式来匹配“反向预搜索”中的表达式。使反向预搜索与正向预搜索在逻辑上完全相同,而方向相反。因此,在 DEELX 中,反向预搜索与正向预搜索一样,没有长度限制。
比如,在 DEELX 引擎中:
文本
表达式
匹配结果
{print}
(?<!{s*)print
匹配失败
(?<={s*)print
匹配成功
补充:Php教程,Php入门