1

所以我一直在尝试使用一些正则表达式从<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属性的链接 active /<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))
    {

    }
4

2 回答 2

3

请,请,请不要使用正则表达式来解析 HTML。

HTML 不是一种常规的结构化语言,因此用正则表达式解析它非常困难,而且一团糟。

看看这些在 PHP 中解析 HTML 的替代方案。

于 2013-08-20T22:31:41.273 回答
1

尝试这个"~<a(?=[^>]* name=[\"']([^'\"]*)|)(\s+[^>]*)?>(.*?)</a>~"

于 2013-08-21T12:21:24.863 回答