在正则表达式领域,什么是回溯?

时间:2018-08-24 02:50:34

标签: regex python-3.x

我的表情是

\((from \/projects(\/(\w|.)+)+):$(\d+\))

我要匹配的字符串是:

(from /projects/idpro/branches/release_2018/test/test/test.1:13118)
(from /projects/idpro/trunk:13074)

我正在使用的在线正则表达式测试实用工具炸毁,说明catastrophic backtracking。因此,在这里,我试图了解什么是回溯,因此可以避免它并修复我的代码。

在我提供的2个字符串示例中,我想两者都匹配。在第一种情况下,我尝试匹配(from /projects。在单词projects之后,只要字符串以:\d+\)

结尾,我就想忽略任何深度的路径。

类似地,对于第二个示例,如果(from /projects后跟至少一个folder,并以:\d+\)结尾,我想要一个匹配项。

AdThanksVance

1 个答案:

答案 0 :(得分:0)

我不确定到底是什么导致了灾难性的回溯。但无论如何,我会这样称呼您的正则表达式:

^\(from \/projects(?:\/[^\/]+)*:\d+$

正如您在下面的演示中所看到的,没有发生灾难性的回溯。

Demo

灾难性的回溯通常与书写不当的正则表达式模式有关。因此,请不要这样做,并且可能不会发生。