Skip to main content
 首页 » 编程设计

c#之正则表达式匹配挂起我的程序

2024年02月05日25JustinYoung

我们有一个应用程序,我们使用以下 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 不是有效的电子邮件。

由于您使用的是 , 你可能会读到: