2013-02-24 34 views
7

我試圖從電子郵件中獲取電子郵件。從字符串中獲取電子郵件 - 正則表達式語法+ preg_match_all

$string = "bla bla [email protected] MIME-Version: [email protected] bla bla bla"; 
$matches = array(); 
$pattern = '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b'; 
preg_match_all($pattern,$string,$matches); 
print_r($matches); 

錯誤即時得到的是:分隔符不能是字母,數字或反斜線

得到了正則表達式的語法從這裏http://www.regular-expressions.info/email.html

我應該怎麼辦?提前致謝!

+0

添加/ i或剛剛/末尾B後(即在圖形)的 – Shridhar 2013-02-24 10:47:41

+0

可能重複[如何驗證PHP中的電子郵件地址](http://stackoverflow.com/questions/12026842/how-to-validate-an-email-address-in-php) – PeeHaa 2013-02-24 16:43:51

回答

16

像這樣

$pattern = '/[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i'; 

或更小的版本:)

$pattern = '/[a-z\d._%+-][email protected][a-z\d.-]+\.[a-z]{2,4}\b/i'; 
+0

工程很好,你能解釋是什麼原因導致錯誤,你做了什麼來解決它? – 2013-02-24 10:53:06

+1

@MorSela是的,您需要的第一個必須添加分隔符/ /在模式的開始和結束。在需要添加「i」修飾符以便不區分大小寫。就這樣。 :) – Winston 2013-02-24 10:56:02

+0

感謝那個m8,接受asnwer :) – 2013-02-24 11:03:39

1

你只需要將你的模式包裹在正確的分隔符中,就像正斜槓一樣。像這樣:

$pattern = '/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/'; 
+0

我之前試過,$匹配空出來。 。 – 2013-02-24 10:50:48

+1

在這種情況下,你的正則表達式需要調整。語法錯誤通過正確分隔來解決;構建一個有效的正則表達式是一個完全不同的事情:) – 2013-02-24 10:52:07

1

當使用正則表達式PCRE功能它需要附上由分隔符的模式:

PHP Delimiters

Often used delimiters are forward slashes (/), hash signs (#) and tildes (~). The following are all examples of valid delimited patterns.

/foo bar/ 
#^[^0-9]$# 
+php+ 
%[a-zA-Z0-9_-]% 

然後,你必須糾正這行:

$pattern = '/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/'; 

$pattern = '#\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b#'; 
+0

我之前試過它,$匹配空出來.. – 2013-02-24 10:52:12

+0

它關於你的模式...改變它的玩法... – 2013-02-24 10:52:37