【发布时间】:2013-08-20 22:25:02
【问题描述】:
所以我一直在尝试使用一些正则表达式从<a href='#' >HTML a tag</a> 中提取信息,以获得可能的标签的三种不同模式。
<a id="Anchor_One" name="Anchor_One"> Anchor Details </a>
<a href="#Anchor_Two" name="Anchor_Two" > Anchor Two Details </a>
<a name="Anchor_Three" > Anchor Three Details </a>
到目前为止,我有一些正则表达式可以从给定的 HTML 标记 /(\\w+)\s*=\\s*("[^"]*"|\'[^\']*\'|[^"\'\\s>]*)/ 中提取所有属性。而且我还有一些正则表达式来匹配具有href 属性活动/<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU 的链接。但我似乎无法创建一个模式来匹配链接标签可能具有的其他组合。
<a id="Anchor_One" name="Anchor_One"> Anchor Details </a>
<a name="Anchor_Three" > Anchor Three Details </a>
没有设置href 属性的链接,不会被我当前的模式拾取,所以不是所有的锚都可以检索到。
$regexp = '/<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU';
//parse the page with the provided regular expression
if(preg_match_all($regexp, $sessionBlock, $htmlMatches))
{
}
【问题讨论】:
-
不要使用正则表达式解析 HTML。使用适当的 HTML 解析模块。 您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用已经编写、测试和调试的 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php。
标签: php regex html-parsing preg-match-all