2011-11-11 135 views
-2

我對電子郵件的格式如下頁<a href='mailto:[email protected]'> ,我想我目前使用這個來匹配一個正則表達式如何修改此正則表達式?

上:

$pattern = '#a[^>]+href="mailto:([^"]+)"[^>]*?>#is'; 
preg_match_all($pattern, $data, $matches); 
foreach ($matches[1] as $key => $email) { 
    $emails[] = $email; 
} 

,但它會導致不匹配。 $emailsNULL

我只是在學習正則表達式,所以請原諒這個問題! 有人可以解釋爲什麼它不工作,並建議改變?謝謝

+0

那麼,當你** **學到的東西是好的,當你寫的東西** *自己*,從頭開始,不只是修改你在某處找到的代碼。讓我們從頭開始一步一步地從頭開始解決問題(如果你真的想學*某件事) – zerkms

+0

在我改變主意之前,請將您的問題的標題更改爲更有意義的內容並因此而倒退。 – Romain

+1

單引號與雙引號不同。 – thetaiko

回答

1

問題是,在你的例子中,你使用單個qoutes ',而在正則表達式中它正在尋找雙引號"

改變你的模式:

$pattern = '#a[^>]+href=\'mailto:([^\']+)\'[^>]*?>#is'; 

會做的伎倆。

0

正則表達式的作品,但你不檢查這兩個'(單引號)和「(雙引號),這樣

<a href='mailto:[email protected]'> 

不會得到匹配,但

<a href="mailto:[email protected]"> 

會。

簡單地改變正則表達式

'#a[^>]+href=[\'"]+mailto:([^"]+)[\'"]+[^>]*?>#is' 

將做的伎倆!

1

只需添加雙的單引號的支持,@萊納斯-Kleen的和@thetaiko說:

$pattern = '#a[^>]+href=[\'"]mailto:([^\'"]+)[\'"][^>]*?>#is';