我有代码:
string pattern =
@"^(((://)?([A-Za-z0-9\.,\(\)\?\-!@#$%\^&\*=_\+\[\]\{\}\\""';><~\| \n\t:]+(/|://)?)*[A-Za-z0-9\.,\(\)\?\-!@#$%\^&\*=_\+\[\]\{\}\\""';><~\| \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会冻结?
答案 0 :(得分:0)
在上一部分添加\r
对我有用。它应该是:
... | \n\r\t]))$
不
... | \n\t]))$
测试:
string pattern =
@"^(((://)?([A-Za-z0-9\.,\(\)\?\-!@#$%\^&\*=_\+\[\]\{\}\\""';><~\| \n\t:]+(/|://)?)*[A-Za-z0-9\.,\(\)\?\-!@#$%\^&\*=_\+\[\]\{\}\\""';><~\| \n\r\t]))$";
Regex regex = new Regex(pattern);
string message = "THINGS IN THIS MESSAGE ARE\r\n";
regex.IsMatch(message);