寻找这个正则表达式的URI匹配,但它正在崩溃正则表达式测试人员

时间:2009-02-12 02:05:51

标签: regex

我正在尝试使用这个正则表达式,但是我在测试它时遇到了麻烦,因为无论出于什么原因它只会崩溃我使用的两个正则表达式测试器。

^([A-ZA-Z - ] + /)+ $

如果我没弄错的话,那应该匹配遵循这种格式的任何URI:

一些-URI字符串/一些-URI字符串/一些-URI字符串

但是,我不希望它匹配:

一些-URI字符串/一些-URI字符串//一些-URI字符串

注意双斜杠。基本上,它是类别/子类别/子子类别/页面

允许任意数量的子类别。

4 个答案:

答案 0 :(得分:3)

问题在于,对于不匹配的字符串,您的模式是回溯正则表达式引擎的病态案例(在大多数脚本语言中都是如此,例如Perl,Python和基于PCRE的任何东西)。

更多信息:

您可以将其重写为:

^([a-zA-Z-]+/)*[a-zA-Z-]+$

或者你的RE实施可能有其他设施可以避免这种情况。

答案 1 :(得分:2)

查找灾难性的回溯...你需要更好地定义它,或者写一个一次一个部分地删除URI字符串......这个是递归的,为什么它会崩溃你...或者,你可以把它从贪婪改为懒惰......我实际上并没有调查这个正则表达式,但这就是我所看到的......

答案 2 :(得分:0)

对于PCRE,您可以使组成为原子以避免灾难性的回溯。只需像这样添加?>

^(?>[a-zA-Z-]+/?)+$

请参阅“Atomic Grouping and Possessive Quantifiers”下的PCRE manual

答案 3 :(得分:0)