preg_match匹配html标签内部文本的最简单方法

时间:2011-07-27 11:26:46

标签: php preg-match html

  

可能重复:
  Best methods to parse HTML with PHP

例如我有一个像html的代码:

<table width="100%" border="0" cellspacing="0" cellpadding="0" class="rowData">
  <tr align="center" class="fnt-vrdana-mavi" >
            <td style="font-size:11px" colspan=3><b>Text text text</b>:3</td>
        </tr>

        <tr class="header" align="center">
            <td height="18" colspan="3">Text text text</td>

        </tr>
        <tr align="center" class="fnt-vrdana" bgcolor="#eff3f4" height="18">
            <td width="32%" height="17"><b>1</b></td>
            <td width="34%"><b>0</b></td>
            <td width="34%"><b>2</b></td>
        </tr>
        <tr align="center" class="fnt-vrdana-mavi">

            <td height="17">2.90</td>
            <td>3.20</td>
            <td>1.85</td>
        </tr>
</table>

哪个是最佳正则表达式,以匹配<td>个标记内的所有数据?

2 个答案:

答案 0 :(得分:2)

/<td.*?>(.*?)<\/td>/会获得<td></td>之间的所有数据。

标记中获取数据<td>/<td([^>]*)>/

答案 1 :(得分:2)

我通常建议您是否需要在HTML文档中实际表达您要查找的内容以使用xpath表达式,因为它可以为您提供实际值,而正则表达式无法进一步解析HTML / XML,xpath表达式更精细。请参阅返回文本值的输出,例如w / o其中的任何其他标记:

array(8) {
  [0]=>
  string(16) "Text text text:3"
  [1]=>
  string(14) "Text text text"
  [2]=>
  string(1) "1"
  [3]=>
  string(1) "0"
  [4]=>
  string(1) "2"
  [5]=>
  string(4) "2.90"
  [6]=>
  string(4) "3.20"
  [7]=>
  string(4) "1.85"
}

代码:

$html = <<<EOD
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="rowData">
  <tr align="center" class="fnt-vrdana-mavi" >
            <td style="font-size:11px" colspan=3><b>Text text text</b>:3</td>
        </tr>

        <tr class="header" align="center">
            <td height="18" colspan="3">Text text text</td>

        </tr>
        <tr align="center" class="fnt-vrdana" bgcolor="#eff3f4" height="18">
            <td width="32%" height="17"><b>1</b></td>
            <td width="34%"><b>0</b></td>
            <td width="34%"><b>2</b></td>
        </tr>
        <tr align="center" class="fnt-vrdana-mavi">

            <td height="17">2.90</td>
            <td>3.20</td>
            <td>1.85</td>
        </tr>
</table>
EOD;

// create DomDocument to operate xpath on
$doc = new DomDocument;
$doc->loadHTML($html);

// create DomXPath
$xpath = new DomXPath($doc);

// perform the XPath query
$nodes = $xpath->query('//td');

// process nodes to return their actual value    
$values = array();
foreach($nodes as $node) {
    $values[] = $node->nodeValue;
}
var_dump($values);