正则表达式在文本中查找电子邮件


Regular Expression to find Email in a Text

我使用PHP在给定的文本中查找电子邮件地址。我当前的正则表达式是:

'/(['w+'.]*'w+@['w+'.]*'w+['w+'-'w+]*'.'w+)/is'

它消耗了大量的CPU资源。是否有任何优化和低资源利用率(即CPU)RegEx来查找给定文本中的有效电子邮件。

/^[^@]+@[a-z]+('.[a-z]+)+$/

比你的好。

为什么

假设我们想测试这封电子邮件:foo@bar.co.uk

如果成功,我的regexp执行14个步骤以找到解决方案
您在22个步骤中

但最大的区别是在不匹配的情况下

假设我们想测试这封电子邮件:foo@bar.co.uk.foo.

我的正则表达式执行31个步骤并失败

您的(应该使用^$分隔符进行修改,否则它将与之匹配为一个好的分隔符)执行292步并失败!

有时为了获得更好的性能而抵消一些误报是可取的:

/[^ @]*@[^ ]*/

这应该很快。它还将匹配__imp__MessageBoxW@16之类的内容,但这样的构造在普通文本中并不常见。

试试这个

/[-'d'w'W]+@[-'d'w.+_]+.'w{2,4}/

匹配:

hello.world@example.commy_guru@lcoalhostguy.31@site.co等…

测试时间http://regexr.com/