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