Regex.IsMatch冻结

时间:2017-05-30 12:13:45

标签: c#

我有代码:

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会冻结?

1 个答案:

答案 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);