【问题标题】:Having a problem matching a html element using Preg_Match使用 Preg_Match 匹配 html 元素时出现问题
【发布时间】:2010-02-09 23:44:18
【问题描述】:

我正在尝试匹配一个 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>

我错过了什么吗?

感谢大家的帮助

【问题讨论】:

  • 我不知道社区要告诉人们多少次......不要用正则表达式解析 html.. 使用 SimpleXml、DOMDocument、Zend_Dom_Query、SimpleHtml 等。:-)
  • 这个我知道,但这是一个需要修复的旧脚本,现在没有时间重写它。

标签: php preg-match


【解决方案1】:

&lt;a&gt; 标记中没有与 title="Wat" 匹配的内容。

我建议不要使用正则表达式来解析它。我对 PHP 不太熟悉,但我确信它已经有一些东西可以为你完成大部分工作。

【讨论】:

  • 如果您要搜索的文档是有效的 XHTML,您可以使用内置的 simpleXML 解析器,但很多时候不是。
  • @Corey - 啊啊!谢谢,我什至没有注意到这一点。亲爱的上帝!输入title=\"[^&lt;]*\" - 似乎可以正常工作。
【解决方案2】:

正如我在评论中所说,在尝试解析 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;
}

【讨论】:

    【解决方案3】:
    $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);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      相关资源
      最近更新 更多