正则表达式匹配正则表达式

时间:2010-01-14 21:34:43

标签: regex

是否可以编写与正则表达式匹配的正则表达式?有没有人有例子?如果存在一些理论障碍,是否有人知道至少与最常见的正则表达式相匹配的正则表达式?

7 个答案:

答案 0 :(得分:17)

正则表达式不是常规语言,因此无法用正则表达式来描述!

更新:更有用的实用答案

您无法使用任何正则表达式检测有效的正则表达式。要检测其有效性,您应该使用正则表达式库解析字符串,如果它是无效的正则表达式,它将失败。例如,在Java中,它将类似于:

boolean isValidRegexp(String s) {
  try {
    Pattern.compile(s);
    return true;
  } catch (Exception e) {
    return false;
  }
}

这种技术几乎适用于任何语言。

答案 1 :(得分:8)

你错了!在我的秘密实验室,我的邪恶科学家发现了可以匹配任何正则表达式的正则表达式:

.*

它甚至会匹配null表达式。让我们看看你试着匹配那个

作为一个额外的好处,它甚至会匹配不是正则表达式的字符串。

答案 2 :(得分:2)

使用标准正则表达式是不可能的。

正则表达式可以无限期嵌套(例如,/(a(b(c(d))))/),使用标准正则表达式无法匹配。

答案 3 :(得分:1)

根据Crockford,这是一个匹配正则表达式的正则表达式(至少在JavaScript中)

/\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/

答案 4 :(得分:0)

是。示例:此正则表达式^[a-z][+*]$将匹配此正则表达式z+以及此a*和此c+,依此类推。

答案 5 :(得分:0)

这是不可能的。正则表达式只能匹配常规语言。正则表达式不是常规语言。如果内存服务,我相信它们是一种无上下文的语言,需要无上下文语法才能匹配。

答案 6 :(得分:0)

我们走了:

m{/([^\\/]++|\\.)/}

应匹配由//分隔的正则表达式。

当然,它不能确保正则表达式正确解析 - 它只是识别它的位置(例如,对于标记化器)。