2015-06-12 80 views
0

我想解析下面的html塊使用SimpleHTMLDOM,但沒有得到全名和電子郵件,因爲頁面使用相同的表結構沒有任何id或類名稱爲不同的內容塊,但幸運的是,頁面在每張表格前使用不同的評論例如...基於html評論的高級正則表達式幫助

<!-- Showing Buyer Details --> 
<table style="table-layout:fixed; width:100%; border: 1px solid #0000CD; border-collapse:collapse; margin: 0px; font-family: Arial,Helvetica; font-size: 10pt;background-color: #FFFFFF; margin-left:auto; margin-right:auto " class=""> 
    <tbody class=""><tr class=""><td style="border:solid 1px #0000CD;padding: 5px; font-weight:bold" class="">Showing Buyer Details</td></tr> 
    <tr class=""><td style="padding: 5px;" class=""> 
     <table border="0" style="font-family: Arial,Helvetica; font-size: 10pt;" class=""> 
       <tbody class=""><tr class=""><td valign="top" class=""><b class="">FULL NAME</b></td></tr> 

       <tr class=""><td valign="top" class="">ADDRESS GOES HERE</td></tr> 
         <tr class=""> 
       <td valign="top" class="">(123) 456-7890</td> 

      </tr> 
          <tr class=""><td valign="top" class="">(321) 098-(Office Main Line)</td></tr> 
          <tr class=""> 
        <td valign="top" class=""><a href="mailto:[email protected]" class="">[email protected]</a></td> 

       </tr> 
     </tbody></table> 
    </td></tr> 
</tbody></table> 

我想要得到完整的名稱和電子郵件地址使用正則表達式或好東西。這對我來說確實很先進,所以我很感激任何真正的幫助。非常感謝。

+0

請告訴我們您到目前爲止所嘗試過的。 –

+0

我剛剛嘗試使用SimpleHTMLDomParser運行'$ html-> find('comment')',但沒有運氣我真正想要的。我正在學習正則表達式,請有人幫忙。 – seoppc

+0

電子郵件地址很簡單,你可以用'/ mailto \:(。+)「/' – castis

回答

0

您可以嘗試通過正則表達式來選擇表

/<!-- Showing Buyer Details -->\s*(.+<\/table>\s*<\/td>\s*<\/tr>\s*<\/tbody>\s*<\/table>)/s 

那麼,如果你使用SimpleHTMLDomParser,寫(如果我不魯斯任何級別)

$html = str_get_html($str); 
$name = $html->find("table", 1)->find("tr", 0)->find("td", 0)->find("b", 0)->innertext; 
$address = $html->find("table", 1)->find("tr", 1)->find("td", 0)->innertext; 
if (!$name || !$address) die("nof found"); 
echo $name . " " . $address; 
+0

是的,我已經嘗試過,但作爲我已經提到的,此頁面已使用相同的表結構各個部分以便唯一的選擇就是讓使用像評論數據<! - 顯示買家詳細信息 - > – seoppc

+0

您可以通過任何文本採取評論和之間的文本處理,然後使用這個片段的解析器 – splash58

+0

聽起來很酷,你能更新你的答案嗎? – seoppc

0

看起來你要需要獲取表格的正確部分,然後在該處輸入電子郵件地址。不會騙你,這對類和HTML文檔的其餘部分會更容易。

首先獲取所有td元素,找到一個短語「Showing Buyer Details」。從那裏,你做一些很好的舊DOM遍歷到你想要的節點。

$tds = $html->find('td'); 
$emails = array(); 
foreach($tds as $td){ 
    if($td->plaintext == "Showing Buyer Details"){ 
     $email_node = $td->parent()->next_sibling()->first_child()->first_child()->first_child()->last_child(); 
     array_push($emails, $email_node->plaintext); 
    } 
} 

此時,您的$ emails數組應該充滿電子郵件地址。我跟這個數組一起去了,因爲從你的問題來看,這些表是否有多個是不明確的。無論如何,搜索所有<td>元素並不是件好事,但我不明白它是如何使用評論的。