代码之家  ›  专栏  ›  技术社区  ›  mathk

这个正则表达式是指数的吗?

  •  1
  • mathk  · 技术社区  · 16 年前

    /.*(Set-Cookie: (.*))?;.*(<\?xml.*)/
    

    是一个指数regexp。

    谢谢

    1 回复  |  直到 16 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    这实际上取决于regex引擎,但在大多数引擎中,当没有匹配时,该模式可能是高次多项式(可能是立方或更高)。

    您可以使用RegexBuddy来查看匹配需要多少步,更重要的是,不匹配某些输入需要多少步。您可以使用它来测试回溯过程在某些引擎中的复杂程度。

    现在还不清楚你到底想做什么,但这种模式确实与 Set-Cookie

    如果您试图解析XML,那么请不要使用正则表达式。在大多数现代语言中都有许多XML解析器,它们不仅适合于这项工作,而且比regex更正确,更易于使用。

    工具书类


    模式被揭穿了

    Set-Cookie: NOMNOMNOM;<?xml
    

    /.*(Set-Cookie: (.*))?;.*(<\?xml.*)/ Set-Cookie: NOMNOMNOM ,而第2组没有捕获 NOMNOMNOM ( as seen on rubular.com ). 那是因为 .* 狼吞虎咽的cookie,由于cookie子模式是可选的,它仍然是一个匹配无论如何。

    .* 不情愿的 .*? . 现在,第一组可以比赛了 ,这也许是一直以来的意图( as seen on rubular.com ).

    然而,这并不是一个进步。你真的不想朝这个方向走。regex仍然有很多问题,要让它正常工作将是非常困难的,如果不是几乎不可能的话。

    应该注意的是,给定的模式并不匹配 ";<?xml" as seen on rubular.com ). 也就是说,只要有 ; 字符串中的任何位置,然后 <?xml

    相关问题