PCRE:反向引用在lookbehinds中是不允许的?
PCRE正则表达式/..(?<=(.)1)/
无法编译:“在一个lookbehind断言中不允许子模式引用。” 有趣的是,它似乎可以被视为可接受的,像/(?=(.)1)../
,而不是在/(?=(.)1)../
中。
是否存在技术上的原因,为什么反向引用不能专门用于向后看?
使用Python的re模块,即使它们匹配某些固定长度的字符串,在向后看时也不支持组引用。
Lookbehinds不完全支持PCRE规则。 具体来说,当正则表达式引擎到达后视时,它会尝试确定它的大小,然后跳回来检查匹配。
这个尺寸决定带给你一个选择:
由于第一种解决方案对我们(用户)来说是最好的,所以它显然是最慢的,也是最难开发的。 对于PCRE正则表达式,他们决定使用第二种解决方案。 作为另一个例子,Java正则表达式引擎允许半变量lookbehinds:您只需确定最大大小。
我来到PCRE和Python的重新模块。
我还没有发现PCRE文档中的其他内容,而不是这个错误代码:
编译错误代码
25:lookbehind断言不是固定长度
但是在这种情况下,后向断言是固定长度的。
现在,我们可以在re文档中找到以下内容:
包含的模式只能匹配一些固定长度的字符串,这意味着abc或a | b是允许的,但a *和a {3,4}不是。 即使它们匹配某些固定长度的字符串,也不支持组引用。
我们有罪...如果你愿意,你可以尝试Python的正则表达式模块,它似乎支持可变长度的后视。
链接地址: http://www.djcxy.com/p/26835.html上一篇: PCRE: backreferences not allowed in lookbehinds?
下一篇: Objective C: Exporting Private and Public Key from Keychain