【发布时间】:2011-11-18 01:19:55
【问题描述】:
众所周知,现代正则表达式实现(最显着的是 PCRE)与 regular grammars 的原始概念几乎没有共同之处。例如,您可以解析 context-free grammar {anbn; 的经典示例。 n>0}(例如aaabbb)使用这个正则表达式(demo):
~^(a(?1)?b)$~
我的问题是:你能走多远?是否也可以使用解析context-sensitive grammar {anbncn;n>0} (例如aaabbbccc)聚合酶链反应?
【问题讨论】:
-
(?R)和~到底是做什么的?preg_match('a*b*c*',...)有什么问题? -
首先,PHP 正则表达式需要分隔符。这就是
~的用途。其次,abc* 匹配 acccccccccc -
@Chriszuma:
~只是分隔符(您也可以使用/和许多其他字符)。(?R)表示递归。它的意思是“把整个正则表达式再放在这里”。 -
a*b*c*匹配 acccccccccccc 是正确的,但我看不出a+b+c+有什么问题。 -
等等,我现在明白了。棘手的部分是每个组的
n必须相同,对吗?因此,如果有 5 个as,那么b和c中的每个必须正好有 5 个。不,我知道没有递归是不可能的,如果你即使使用递归也能做到,那我当然不知道该怎么做。