2011-11-18 108 views
0

我想用一些正則表達式來刮一個網站。但該網站不是寫在格式良好的HTML。實際上,html很糟糕,而且幾乎沒有結構。但我已經設法解決它的大部分。我現在遇到的問題是,在一些電子郵件,跨度是圍繞像這樣的電子郵件的一個隨機部分包裹:奇怪的情況下的PHP正則表達式

****.*******@g<span class="tournamenttext">mail.com</span> 
************<span class="tournamenttext">@yahoo.com</span> 
<span class="tournamenttext">**********@mail.com</span> 
*******@gmail.com 

有沒有一種方法來檢索這一切矛盾的電子郵件?

+3

用strip_tags($內容)? – galchen

+0

這些文本在哪裏出現在php文件或一些文本或數據庫..你對此更具體。 – Rafee

+0

我從我說的網站上刮。我不知道它是作爲靜態html存儲還是存儲在數據庫中。由於存在如此多的不一致性,我假定使用靜態html – LordZardeck

回答

1
$string ='****.*******@g<span class="tournamenttext">mail.com</span> 
************<span class="tournamenttext">@yahoo.com</span> 
<span class="tournamenttext">**********@mail.com</span> 
*******@gmail.com'; 

$pattern = "/<\/?span[^>]*>/"; 
$string = preg_replace($pattern, "", $string); 

$string後,將只有郵件

****.*******@gmail.com 
************@yahoo.com 
**********@mail.com 
*******@gmail.com 

您的代碼會是這樣

$text[1]->innertext = "Where innertext contains something like: "<em>Local (Open) 
Tournament.</em> ****.*******@g<span class="tournamenttext">mail.com</span>" 

// Firstly clear spans 
$pattern = "/<\/?span[^>]*>/"; 
$text[1]->innertext = preg_replace($pattern, "", $text[1]->innertext); 

// Preg Match mail 
$email_regex = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; // Just an example email match regex 
preg_match($email_regex, $text[1]->innertext, $theMatch); 
echo '<pre>' . print_r($theMatch, true) . '</pre>'; 
+0

看起來像我想要的,但是有什麼辦法可以用類來做同樣的事情嗎?這樣我不會刪除任何不必要的代碼? – LordZardeck

+0

在類中創建一個清除函數,如private function clear($ string){$ pattern =「/ <\/?span[^>] *> /」;返回preg_replace($ pattern,「」,$ string); } –

+0

如果我preg_match,我得到一個空數組 – LordZardeck

1

您可以簡單地刪除所有span標籤,將</?span[^>]*>替換爲無,然後嘗試使用您最喜歡的電子郵件地址查找結果。