【问题标题】:How to preg_match this in PHP? [duplicate]如何在 PHP 中 preg_match 这个? [复制]
【发布时间】:2016-08-16 14:22:53
【问题描述】:

我如何在 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';
}

【问题讨论】:

  • 您是否尝试过完全不使用正则表达式来解析 html?我确信有 html 解析器可以让这项工作变得更容易。
  • @DanielBrunner,没听说过,我去看看,谢谢!
  • This.
  • 我建议this post
  • 另外,如果您负担得起的话,这是一种解决方法 - ideone.com/e6YTRj。 :)

标签: php preg-match match


【解决方案1】:

您可以使用带有 XPath 的 DOM 来获取所有 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 来获取所有文本节点。

否则,如果你知道自己在做什么,你可以在每个 &lt;td&gt; 节点之后添加一些临时字符串,然后剥离标签并使用临时字符串直接展开:

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

this demo

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 2011-07-12
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多