【问题标题】:Is it possible to have regexp that matches all valid regular expressions?是否有可能拥有匹配所有有效正则表达式的正则表达式?
【发布时间】:2011-02-23 19:28:53
【问题描述】:

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

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

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

【问题讨论】:

标签: regex computer-science regular-language


【解决方案1】:

不,这是不可能的。这是因为有效的正则表达式涉及分组,这需要平衡括号。

平衡分隔符不能被正则表达式匹配;它们必须与context-free grammar 匹配。 (那篇文章中的first example 处理平衡括号。)

【讨论】:

  • 好的,正常的正则表达式就是这样。像 Perl 正则表达式这样的东西怎么样?
  • @Juha Syrjälä:实际上,我正在专门考虑 Perl 正则表达式。正如我所解释的,分组括号不能与正则表达式匹配。
  • PCRE 和 .NET 扩展正则表达式以匹配平衡子组。 Perl 6 使用同样启用此功能的规则扩展正则表达式。但是现在“正则表达式”的描述已经不准确了。事实上,如今“正则表达式”所理解的大部分内容已经不再是正则了。
【解决方案2】:

在此处查看出色的文章:

Regular expression for regular expressions?

答案是正则表达式不是使用常规语法编写的,而是上下文无关的。

【讨论】:

    【解决方案3】:

    如果您的问题是“匹配所有有效的正则表达式”,答案是(也许令人惊讶)“是”。正则表达式 .* 匹配所有有效(和无效)的正则表达式,但对于确定您是否正在查看一个有效的正则表达式毫无用处。

    但是,由于问题是“匹配所有且仅有效的正则表达式”,因此答案是(正如 DVK 和 Platinum Azure 所说的“不”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-30
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多