正则expression式匹配有效的正则expression式
有没有正则expression式匹配有效的正则expression式?
(我知道有几种正则expression式,其中一种可以。)
如果你只是想检查一个正则expression式是否有效,只要试着用你正在使用的编程语言或正则expression式库进行编译。
正则expression式的parsing远不是微不足道的。 作为RegexBuddy的作者,我已经在这个区块几次了。 如果你真的想这样做,使用正则expression式来标记input,并将parsing逻辑保留为程序代码。 也就是说,你的正则expression式会一次匹配一个正则expression式( ^
, $
, \w
, (
, )
等),你的程序代码会检查它们是否正确。
有没有正则expression式匹配有效的正则expression式?
通过定义,这很简单: 不 。
所有正则expression式的语言是没有 正规的语言(只要看嵌套的括号),因此不能有一个正则expression式来parsing它。
不幸的是,由于括号嵌套错误,大多数无效的正则expression式是无效的。 这正是正则expression式无法匹配的stringtypes。 (好吧,一些奇特的正则expression式系统有recursion扩展,但这很less见)
如前所述,由于recursion性质,不能用正则expression式来描述正则expression式。 你需要一个上下文无关的语法。
但无论如何,这样的正则expression式有什么意义呢? 如果你只是想检查正则expression式是否正确,你可以简单地尝试使用它(Java中的Pattern.compile(regexp)),如果尖叫它是无效的。
你可能需要一个parsing器,而不是一个正则expression式。 正则expression式是强大的工具,但不是parsing工具。 例如,它们不适合嵌套语法。
来自Douglas Crockford的The JavaScript Programming Languagevideo4(共4):
/\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/
根据你的目标,我可以肯定地说。
如果你想从某个地方过滤出正则expression式,这可能会很困难,因为正则expression式具有所有的大小和形状,并不是所有的都以斜杠开始和结束。
如果你只是需要知道是否有正则expression式是有效的还有另一种方法。 根据你使用的语言,你可以尝试/捕捉
如果你能更具体一些,我可以尝试给出一个更好的答案,这个问题是无情的。