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 –