正则表达式匹配有效的正则表达式

时间:2008-12-12 13:49:45

标签: regex

是否有匹配有效正则表达式的正则表达式?

(我知道有几种正则表达式。人们会这样做。)

7 个答案:

答案 0 :(得分:41)

  

是否有匹配有效正则表达式的正则表达式?

通过定义,它非常简单:

所有正则表达式的语言都是没有 常规语言(只看嵌套括号),因此不能有常规表达式解析它。

答案 1 :(得分:38)

如果您只想检查正则表达式是否有效,只需尝试使用您正在使用的编程语言或正则表达式库进行编译。

解析正则表达式远非微不足道。作为RegexBuddy的作者,我曾经在那个街区几次。如果您真的想这样做,请使用正则表达式来标记输入,并将解析逻辑留给过程代码。也就是说,您的正则表达式会一次匹配一个正则表达式标记(^$\w()等),并且程序代码会检查它们是否按正确顺序排列。

答案 2 :(得分:15)

不幸的是,由于括号嵌套错误,大多数无效的正则表达式无效。这正是正则表达式无法匹配的字符串类型。 (好吧,一些花哨的正则表达系统有递归扩展,但这很少见)

答案 3 :(得分:9)

如前所述,由于它们具有递归特性,因此无法使用正则表达式描述正则表达式。你需要一个无上下文语法。

但是,无论如何,有这样一个正则表达式的意义何在?如果你只是想检查一个正则表达式是否正确,你可以简单地尝试使用它(Java中的Pattern.compile(regexp)),如果它尖叫它是无效的。

答案 4 :(得分:5)

您可能需要解析器,而不是正则表达式。正则表达式是强大的工具,但不是解析工具。例如,它们不太适合嵌套语法。

答案 5 :(得分:4)

来自Douglas Crockford的 JavaScript编程语言视频4(共4页):

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

http://video.yahoo.com/watch/111596/1710658大约在-17.20。

答案 6 :(得分:-1)

根据你的目标,我肯定会说。

如果你想从某个地方过滤掉regexps,它可能会很困难,因为正则表达式有各种大小和形状,并且它们并不都以斜杠开头和结尾。

如果您只是需要了解正确的有效性还有其他方法。根据您使用的语言,您可以尝试/捕获

如果你可以更具体一点,我可以尝试给出一个更好的答案,这个问题很有意思。