0

我阅读了这篇文章http://nikic.github.io/2012/06/15/The-true-power-of-regular-expressions.html,其中讨论了 pcre 及其与 chomsky 层次结构的关系。

他讨论了上下文相关语法,并指出 pcre 肯定支持某些上下文相关语言,但不清楚它是否支持所有上下文相关语言。他继续提供

(?<A> (?<= α ) γ (?= β ) )

作为上下文相关语法规则到 pcre 的可能音译,但请注意,lookbehinds 不支持可变宽度。这似乎意味着,如果 pcre 支持可变宽度后视,那么 pcre 可以编码所有上下文相关的语言。

*免责声明:我是一名正则表达式爱好者。

这让我想知道lookbehinds 是否可以转换为lookaheads(因为推测lookaheads 不受这种固定宽度限制的影响)。

然后我写了这个正则表达式作为上下文相关语法的可能替代实现,

(?(?= a) (?: a)(?<A> γ)(?= β))

至于我尝试过的更具体的案例,

(?(?=ab+)(?:ab+)(?<A>[def]{1,5})(?=xyz))

也,

(?(?=ab+)(?:ab+)([def]{1,5})(?=xyz))

因为我并不清楚是否有关于“A”捕获是如何发生的要求(它是否需要是最外层的“分组”?)。

这两个正则表达式都匹配像“abbdefxyz”这样的字符串,但不匹配像“abbadefxyz”和“zdefxyz”这样的字符串。

4

0 回答 0