Con*_*ith 7 regex pcre regex-lookarounds
PCRE正则表达式/..(?<=(.)\1)/
无法编译:"在后观断言中不允许使用子模式引用." 有趣的是,它似乎在前瞻中是可以接受的,例如/(?=(.)\1)../
,不是在后视镜中.
是否存在技术上的原因,为什么特别是在后视镜中不允许反向引用?
使用 Python 的 re 模块,lookbehind 不支持组引用,即使它们匹配某个固定长度的字符串。
Lookbehinds 不完全支持 PCRE 规则。具体来说,当正则表达式引擎达到向后查找时,它将尝试确定其大小,然后跳回检查匹配。
这个尺寸的确定给您带来了一个选择:
由于第一个解决方案对我们(用户)来说是最好的,因此它显然是最慢且最难开发的。因此,对于 PCRE 正则表达式,他们决定使用第二种解决方案。另一个例子是,Java 正则表达式引擎允许半变量lookbehinds:您只需要确定最大大小。
我来到了PCRE和Python的re模块。除了此错误代码之外,我在PCRE 文档
中没有找到任何其他内容:
编译错误代码
25:lookbehind 断言的长度不固定
但在这种情况下,后向断言是固定长度的。现在,我们可以在重新文档
中找到以下内容:
包含的模式必须仅匹配某个固定长度的字符串,这意味着允许使用 abc 或 a|b,但不允许使用 a* 和 a{3,4}。即使组引用匹配某个固定长度的字符串,也不支持组引用。
我们有罪...如果你愿意,你可以尝试Python的正则表达式模块,它似乎支持可变长度lookbehind。
归档时间: |
|
查看次数: |
289 次 |
最近记录: |