【发布时间】:2013-10-22 06:27:31
【问题描述】:
如何使用正则表达式来验证递归语法定义?例如,假设我有以下语法:
阿尔法 :=这只是我所说的递归定义的一个例子——我不是在寻找专门解决这个问题的正则表达式,而是更多如何用正则表达式解决这些问题。
【问题讨论】:
-
你的语法似乎只能产生无限的单词:-)
-
正则表达式只产生正则语言,而不是任意递归的——这可能是不可能的。检查 regular-expressions.info/recurse.html 以获取支持递归的风格。
-
@Kvass Bergi 在第一条评论中所说的是错误的。你不应该关心它。大多数现代正则表达式引擎(包括 Ruby 中采用的 Onigmo)都比正则语法强大得多。从 Ruby 1.9 开始,Ruby 的正则表达式可以处理递归。
-
@JörgWMittag 根据你刚才写的,正则表达式和 regex/regexen 之间的区别只是 Perl 社区内的一项发明,在该社区之外并不存在(Larry Wall 和一些追随者)。人们通常不会区分它们,因此,我认为区分不会有助于避免混淆。它只是增加了另一个层次的混乱。如果他们想纠正这种用法,他们应该引入一个完全不同的词,而不仅仅是“正则表达式”。无论如何,在 Ruby 的上下文中,正则表达式和正则表达式是一样的。
-
@JörgWMittag 此外,Bergi 声称可能无法进行递归,因为它是一个正则表达式。但是很明显,正则表达式的 OP 的意思是你(Perlers)称之为正则表达式的东西,因为在 Ruby 中没有你(Perlers)称之为正则表达式的东西。它具有处理递归的能力,所以我反对 Bergi 的观点是正确的,无论我们是否采用 Perlish 术语。