【发布时间】:2015-09-22 12:48:31
【问题描述】:
在特定字符串上使用Regex.IsMatch (C#, .Net 4.5) 时,CPU 达到 100%。
字符串:
https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792/?type=1&permPage=1
图案:
^http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?$
完整代码:
Regex.IsMatch("https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792/?type=1&permPage=1",
@"^http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?$");
我发现编辑 URL 可以防止这个问题。编辑网址:
https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792
但仍然非常有兴趣了解造成这种情况的原因。
【问题讨论】:
-
正则匹配涉及大量回溯。更多信息请阅读runaway regular expressions
-
由于您没有在点前加反斜杠,因此您的正则表达式可能是
^http(s)?://.+$的一个非常复杂的版本(即匹配 http:// 或 https:// 后跟任何内容)。 -
为什么不用URI类?
-
@SalmanA 在看到潜在危害后,我实际上从正则表达式更改为 URI.TryCreate。