1

我正在尝试匹配一个 html 元素,但我认为它不匹配,因为 $titles 是空的 - 任何人都可以纠正我吗?

我的预赛:

   preg_match_all("~<td align=\"left\" width=\"50%\">[^<]*. <b><a href=\"(.*?)\">[^<]*</a>~i", $main, $titles);

要匹配的示例 HTML:

//<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>

我错过了什么吗?

谢谢大家的帮助

4

3 回答 3

1

标签中没有可匹配title="Wat"的内容。<a>

我建议不要使用正则表达式来解析它。我对 PHP 不太熟悉,但我确信它已经具备了可以为您完成大部分工作的功能。

于 2010-02-09T23:51:49.003 回答
1

正如我在评论中所说,正则表达式很少是尝试解析 html 时使用的正确工具。我打算使用 Zend_Dom_Query 的一个例子,它是 Zend 框架中的一个组件,只是因为我还没有看到它在其中一个问题上被推荐。所以...

$dom = new Zend_Dom_Query($htmlHaystack);
$anchors = $dom->query('//td/a[@title]'); // xpath here
if(count($anchors) > 0)
{
  $titles = array();
  foreach($anchors as $element)
  {
     $titles[] = $element->getAttribute('title');
  }
}
else
{
  $title = null;
}
于 2010-02-10T00:03:55.310 回答
0
$string='<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>';
$s = explode("</a>",$string);
foreach($s as $k){
   if (strpos($k,"href")!==FALSE){
        echo preg_replace('/.*href="|">.*/ms',"",$k);
   }
}
于 2010-02-10T00:08:54.770 回答