2009-09-15 57 views
0

例如,为了从HTML去掉键/值对象下面这样:使用PHP匹配<table >的数据的最有效方法是什么?

<tr> 
      <td id="td3" class="td3" bgcolor="#FFFFFF" colspan="4">■ Related Information </td> 

     </tr> 
     <tr> 
      <td id="td5" class="td5" width="10%">job title:</td> 
      <td id="td5" class="td5" width="90%" colspan="3">Sales Representitive</td> 
     </tr> 
     <tr> 
      <td id="td5" class="td5" width="10%">Date:</td> 

      <td id="td5" class="td5" width="40%">2009-9-15</td> 
     </tr> 
     <tr> 
      <td id="td5" class="td5" width="10%">Location:</td> 

      <td id="td5" class="td5" width="40%">Jiangyin</td> 
     </tr> 
     <tr> 
      <td id="td5" class="td5" width="10%">Degree:</td> 
      <td id="td5" class="td5" width="40%">Bachelor</td> 

      <td id="td5" class="td5" width="10%">Major:</td> 
      <td id="td5" class="td5" width="40%">No limit</td> 
     </tr> 
     <tr> 
      <td id="td5" class="td5" width="10%">Sex:</td> 
      <td id="td5" class="td5" width="40%">No limit</ 
     </tr> 
     <tr> 
      <td id="td5" class="td5" width="10%">Type:</td> 
      <td id="td5" class="td5" width="40%">Fulltime</td> 
      <td id="td5" class="td5" width="10%"></td> 
      <td id="td5" class="td5" width="40%"></td> 
     </tr> 

我已经累写入长的正则表达式的。 有没有更简单的方法来做到这一点?

+0

简单的PHP通常生成HTML,而不是对其进行解析。你是否告诉我们整个故事?你是否在命令行使用PHP? – pavium 2009-09-15 07:54:34

+0

@ pavium,是的,在命令行。 – omg 2009-09-15 08:04:00

回答

5

使用HTML或XML解析器,如DOMDocumentSimpleXML。然后你可以简单地遍历DOM并获取你想要的数据。

+0

它们都可以用来解析HTML吗? – omg 2009-09-15 08:04:31

+0

@Shore:SimpleXML只能解析XML。但是DOMDocument可以解析HTML和XML。 – Gumbo 2009-09-15 08:21:08

2

你可以使用一些简单的正则表达式:

$values = array(); 
if (preg_match_all("/<tr>(.*?)<\/tr>/is", $html, $matches)) { 
foreach($matches[1] as $match) { 
    if (preg_match_all("/<td[^>]*>([^<]+)<\/td>/is", $match, $tds)) 
    array_push($values, $tds[1]); 
} 
} 

var_dump($values); 

当分离的模式,而不是一个单一的大格局是简单了很多。

1

您应该尝试不太了解的PHP Simple HTML DOM Parser。它可以让你做的东西是这样的:

// Create DOM from URL or file 
$html = file_get_html('http://www.google.com/'); 

// Find all images 
foreach($html->find('img') as $element) 
     echo $element->src . '<br>'; 

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>'; 

// Create DOM from string 
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>'); 

$html->find('div', 1)->class = 'bar'; 

$html->find('div[id=hello]', 0)->innertext = 'foo'; 

echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div> 
相关问题