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

时间:2016-05-16 08:01:19

标签: php regex linux

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

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

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

3 个答案:

答案 0 :(得分:1)

这个

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

比你好。

为什么?

假设我们要测试此电子邮件:foo@bar.co.uk

如果成功,我的正则表达式会执行 14个步骤来找到解决方案 你的 22步

但最大的差异是在不匹配的情况下

假设我们要测试此电子邮件:foo@bar.co.uk.foo.

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

你的(应该使用^$分隔符进行修改,否则它会与此匹配)执行 292步骤并失败!

答案 1 :(得分:1)

为了获得更好的表现,有时需要权衡一些误报:

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

这应该很快。它也会匹配__imp__MessageBoxW@16之类的内容,但这种结构在普通文本中并不常见。

答案 2 :(得分:0)

试试这个

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

匹配

hello.world@example.com my_guru@lcoalhost guy.31@site.co等等......

http://regexr.com/

进行测试