扩展语法 - 预搜索(零宽度断言)

DEELX

DEELX 正则表达式扩展语法:预搜索

回到:目录 | 上一页:非捕获分组 | 下一页:独立表达式


预搜索(令宽度断言)

判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。


说明

预搜索有向前和向后两种:

表达式

方向

说明

(?=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

匹配成功

 

regexlab.com © 2005 - 2006