似乎POSIX.1-2008定义的“基本正则表达式” 不支持替换a|b
(尽管某些grep实现可以识别转义的版本\|
)。
由于按定义,常规语言是根据联合来封闭的,这是否意味着POSIX BRE的表达能力不及有限自动机?还是有某种方法可以使用其他构造来模拟交替?
似乎POSIX.1-2008定义的“基本正则表达式” 不支持替换a|b
(尽管某些grep实现可以识别转义的版本\|
)。
由于按定义,常规语言是根据联合来封闭的,这是否意味着POSIX BRE的表达能力不及有限自动机?还是有某种方法可以使用其他构造来模拟交替?
Answers:
的确,POSIX BRE语言不能表达所有正则表达式,因为它缺乏交替性。它甚至无法识别所有有限的语言,更不用说所有常规语言了。
例如,无法识别为BRE。为了证明这一点,请考虑顶级语法形式可能是:
当“我们回到原始问题”时,这意味着查找BRE的唯一解决方案是识别该语言,即找到具有相同属性的较小BRE。这是无限下降的,因此没有具有所需属性的BRE。
我认为BRE可以识别的语言没有“很好”的特征,例如,“自动”的“很好”类可以识别的语言。
\(.*\)\1
(abc|bac)*
。