我们有一个应用程序,我们使用以下 RegEx 来验证电子邮件。
private string _regularExpression = @"^(("".+?"")|([0-9a-zA-Z](((\.(?!\.))|([-!#\$%&'\*\+/=\?\^`\{\}\|~\w]))*[0-9a-zA-Z])*))@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}$";
Regex _reg = new Regex(_regularExpression);
但是我们在源中有一个错误的电子邮件:
abcd1090ihavenoidea.what.going.wrong.here
程序挂起。我们仍然无法找出我们在这里做错了哪一部分?
请您参考如下方法:
程序挂起是因为使用这个正则表达式你会得到一个灾难性的回溯。它停在 Regex 101在 121 628 步之后。我尝试降低输入字符串以查看它的灾难性程度:花了 88 063 步才明白 abcd1090ihav.w 不是有效的电子邮件。
由于您使用的是 c# , 你可能会读到:
