0
我有代码:Regex.IsMatch冻结
string pattern =
@"^(((://)?([A-Za-z0-9\.,\(\)\?\[email protected]#$%\^&\*=_\+\[\]\{\}\\""';><~\| \n\t:]+(/|://)?)*[A-Za-z0-9\.,\(\)\?\[email protected]#$%\^&\*=_\+\[\]\{\}\\""';><~\| \n\t]))$";
Regex regex = new Regex(pattern);
string message =
"THINGS IN THIS MESSAGE ARE\r\n";
regex.IsMatch(message); // <- freezes
Console.ReadKey();
它冻结在regex.IsMatch。当我改变时
message = "THINGS IN THIS MESSAGE ARE\n";
regex.IsMatch返回值。
IsMatch为什么会冻结?
在我的电脑用了〜24秒内运行,你的模式是非常复杂的,需要大量的计算。你想匹配什么?也许我们可以简化它。 –
任何时候一个正则表达式似乎冻结它通常是由于所谓的[灾难性回溯](http://www.regular-expressions.info/catastrophic.html)。这可以通过降低正则表达式的复杂度并引入更好的锚点和/或量词提示来加以改进。 – Phylogenesis
http://www.regular-expressions.info/floatingpoint.html和http://www.regular-expressions.info/catastrophic.html –