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

时间:2010-08-18 08:52:48

标签: regex

我想知道是否:

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

是一个指数正则表达式。

由于

1 个答案:

答案 0 :(得分:4)

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

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

目前尚不清楚你想要做什么,但是这种模式对Set-Cookie子模式允许是可选的并没有太大作用(例如,即使它存在,该组也可能与该字符串不匹配,因为它是可选的开始)。

如果您正在尝试解析XML,请拜托请不要使用正则表达式。大多数现代语言中都有许多XML解析器,它们不仅适用于工作,而且与正则表达式一样,它们也是正确的,更令人愉快。

参考

相关问题


模式,揭穿

要指出为什么这种模式不起作用(无论是快还是慢都无关紧要),请考虑以下输入:

Set-Cookie: NOMNOMNOM;<?xml

使用模式/.*(Set-Cookie: (.*))?;.*(<\?xml.*)/,整个字符串匹配,但第1组不会捕获Set-Cookie: NOMNOMNOM,第2组不会捕获NOMNOMNOMas seen on rubular.com )。那是因为领先的.*吞噬了cookie,而且由于cookie子模式是可选的,所以无论如何它仍然是匹配。

我们可以尝试通过将.*不情愿的.*?作为Set-Cookie来“修复”此问题。现在,第1组可以匹配";<?xml",这可能是一直以来的意图(as seen on rubular.com)。

但是,这几乎不是一种改进。你真的不想走这个方向。正则表达式仍然存在许多问题,如果不是几乎不可能的话,让它正常工作将非常困难。

应该注意的是,给定的模式与;as seen on rubular.com)匹配。也就是说,只要字符串中的任何位置都有<?xml,然后是{{1}},模式就会匹配。目前尚不清楚这种模式是否确实有用。

相关问题