2016-08-16 25 views
0

我该如何preg_match这个在PHP中?如何在PHP中preg_match?

$item[0] = <tr><td rowspan=2>07/07/2016 14:55</td><td>AC MENDES - Mendes/RJ</td><td><font color="000000">Postado depois do horário limite da agência</font></td></tr> 

我尝试下面的代码,但它没有工作...

if(preg_match("@<td rowspan=[2]>(.*)</td><td>(.*)</td><td><FONT COLOR=\"[0-9A-F]{6}\">(.*)</font></td>@", $item[0], $d)) 
{ 
    echo 'OK'; 
} 
+0

你有没有尝试不使用正则表达式来解析HTML?我确信那里有一些html解析器可以让这个工作变得更容易。 –

+0

@DanielBrunner,我从来没有听说过,我会看看,谢谢! – William

+1

[This](http://stackoverflow.com/a/1732454/3554833)。 – Script47

回答

1

您可以使用DOM使用XPath来获取所有TD文本:

$html = <<<DATA 
<tr><td rowspan=2>07/07/2016 14:55</td><td>AC MENDES - Mendes/RJ</td><td><font color="000000">Postado depois do horário limite da agência</font></td></tr>; 
DATA; 
$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 
$xpath = new DOMXPath($dom); 
$tds = $xpath->query('//td'); 
$res = array(); 
foreach($tds as $td) { 
    array_push($res, $td->nodeValue); 
} 
print_r($res); 

参见PHP demo

//td将得到全部td个节点。您也可以使用'//text()' XPath来抓取所有文本节点。

否则,如果你知道你在做什么,你可以分别<td>节点之后添加一些临时字符串,然后剥去标签和爆炸的权利与临时字符串:

explode("###", strip_tags(str_replace("<td>", "<td>###", $s))) 

this demo