2012-03-06 44 views
0

我正在使用正则表达式函数从字符串中获取电子邮件地址。电子邮件地址位于字符串的两侧,其中包含不同的字符。正则表达式正则表达式函数获取电子邮件与大写字母不匹配

string=:'Here is the email address I would like to get out of here [email protected] in 1 st try'

这下面的语法返回电子邮件地址,但错过了资本人物和像[[email protected]]资本一遗漏约字符串返回的电子邮件地址。

$regex='`([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})`'; 

回答

1

我没有详细检查你的正则表达式,但如果资本字符是唯一的问题,那么刚刚过去的正则表达式的分隔符

$regex='`([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})`i'; 

这个修改使得正则表达式后添加i修改不区分大小写。

好的,那么你应该在正则表达式中添加至少一些锚点\b,以避免部分匹配。

$regex='`\b([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,6})\b`i'; 

看到它here on Regexr

从单词字符(A-Za-z0-9_)向非单词字符(所有其他国家),并反过来改变的\b匹配。

您应该考虑将最后一个量词从{2,4}更改为{2,6},还有一些稀少的域长度超过4个字符。

+0

谢谢。修正@stema – 2012-03-06 06:47:55

0

在JavaScript

function extractEmail() 
{ 
    var sentnce="Here is the email address I would like to get out of here [email protected] in 1 st try"; 
    var regEmail=/^[a-zA-Z0-9]+[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+[\.]{1}[a-zA-Z]{2,4}$/; 

var strArray=sentnce.split(' '); 



    for(i=0;i<strArray.length;i++) 
    { 

     if(regEmail.test(strArray[i])) 
     { 
      alert('email: '+strArray[i]); 

     } 

    } 

} 
0
在您的正则

_a-z0-9不包括大写字母。如果发生这种情况,请使用此代替:\w(“单词字符”元序列,字母数字或'字母,数字和下划线'):[\w-]。 (编辑)我也很肯定你可以在没有未定量的paren组的情况下完成(你正在匹配整个地址而不是用匹配组解析它,所以它们没有做任何有用的事情),并得到一个更漂亮的正则表达式:

$regex = "\b[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.[a-zA-Z]{2,6}\b"; 

VS

$regex='`\b([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,6})\b`i'; 

regexr link here(感谢,很酷的网站STEMA:])