2012-03-06 68 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:])