C# Regex.IsMatch冻结

C# Regex.IsMatch冻结,c#,C#,我有密码: string pattern = @"^(((://)?([A-Za-z0-9\.,\(\)\?\-!@#$%\^&\*=_\+\[\]\{\}\\""';><~\| \n\t:]+(/|://)?)*[A-Za-z0-9\.,\(\)\?\-!@#$%\^&\*=_\+\[\]\{\}\\""';><~\| \n\t]))$"; Regex regex = new Regex(pattern); string me

我有密码:

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返回值


为什么iMatch会冻结?

在最后一节中添加
\r
对我很有用。应该是:

... | \n\r\t]))$
不是:

测试:

字符串模式=

@“^((:/)?([A-Za-z0-9\,\(\)\?\-!@$%\^&*=\u\+\[\]\{\\\”"“;>在我的电脑中,运行大约需要24秒,你的模式非常复杂,需要大量计算。你想匹配什么?也许我们可以简化它。任何时候正则表达式似乎冻结,通常都是由于所谓的原因。这可以通过降低正则表达式的复杂性和引入更好的锚来改进和/或量词提示。和模式无法更改。它来自xsd文件。不允许使用“\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);