是否有匹配有效正则表达式的正则表达式?
(我知道有几种正则表达式。人们会这样做。)
答案 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]*/
答案 6 :(得分:-1)
根据你的目标,我肯定会说。
如果你想从某个地方过滤掉regexps,它可能会很困难,因为正则表达式有各种大小和形状,并且它们并不都以斜杠开头和结尾。
如果您只是需要了解正确的有效性还有其他方法。根据您使用的语言,您可以尝试/捕获
如果你可以更具体一点,我可以尝试给出一个更好的答案,这个问题很有意思。