我使用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.com
my_guru@lcoalhost
guy.31@site.co
等…
测试时间http://regexr.com/