能否有一个能匹配所有有效正则表达式的正则表达式?

6

是否可能仅使用正则表达式来检测给定的字符串是否为有效的正则表达式?

假设我有一些字符串,这些字符串可能是有效的正则表达式,也可能不是。我希望有一个正则表达式能够匹配那些对应于有效正则表达式的字符串。这是可能的吗?或者我必须使用一些更高级的语法(即上下文无关语言)来检测它?如果我使用了某些扩展版本的正则表达式(如Perl正则表达式),会受到影响吗?

如果可能的话,匹配正则表达式的正则表达式是什么?


3个回答

8
不可能。这是因为有效的正则表达式包括分组,需要平衡的括号。
平衡的分隔符不能被正则表达式匹配;它们必须使用上下文无关文法进行匹配。(该文章第一个示例涉及平衡的括号。)

好的,对于普通正则表达式来说是正确的。那么像Perl正则表达式这样的东西呢? - Juha Syrjälä
@Juha Syrjälä:实际上,我特别考虑了Perl正则表达式。正如我所解释的那样,分组括号无法与正则表达式匹配。 - Platinum Azure
PCRE和.NET扩展了正则表达式,以匹配平衡子组。Perl 6通过规则扩展了正则表达式,也实现了这一点。但是现在,“正则表达式”这个描述已经不再准确。事实上,今天大多数人所理解的“正则表达式”已经不再是正则的了。 - Tim Pietzcker

1

0
如果你的问题是“匹配所有有效的正则表达式”,答案是(也许令人惊讶的)“是”。正则表达式.*可以匹配所有有效(和无效)的正则表达式,但对于确定你是否正在查看一个有效的正则表达式来说,它是相当无用的。
然而,由于问题是“匹配所有且仅匹配有效的正则表达式”,答案是(正如DVK和Platinum Azure所说)“不是”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接