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
|
匹配成功 |
|