Php 从一个<;a>;带有正则表达式的HTML标记

Php 从一个<;a>;带有正则表达式的HTML标记,php,html,regex,pcre,Php,Html,Regex,Pcre,我已经有了一个函数,可以从给定标记页面上的所有a标记中检索href属性。但是,我还想检索其他属性,即title属性 我觉得这是对我已经在使用的正则表达式的简单修改,但我唯一关心的是标记中出现的顺序。如果我有此代码的链接: <a href="somepage.html" title="My Page">link text</a> 我希望对其进行相同的分析,即使它看起来像这样,也不会导致任何错误: <a title="My Page" href="somepage

我已经有了一个函数,可以从给定标记页面上的所有
a
标记中检索
href
属性。但是,我还想检索其他属性,即
title
属性

我觉得这是对我已经在使用的正则表达式的简单修改,但我唯一关心的是标记中出现的顺序。如果我有此代码的链接:

<a href="somepage.html" title="My Page">link text</a>

我希望对其进行相同的分析,即使它看起来像这样,也不会导致任何错误:

<a title="My Page" href="somepage.html">link text</a>

这是我的处理函数:

function getLinks($src) {
    if(preg_match_all('/<a\s+href=["\']([^"\']+)["\']/i', $src, $links, PREG_PATTERN_ORDER))
        return array_unique($links[1]);
    return false;
}
函数getLinks($src){ 如果(preg_match_all('/试一下我刚才做的这个

该示例包含如下模式:
]*)>([^
将捕获html中的属性


现在我看到它没有提取属性名称和值,只提取整个属性文本本身。使用它来提取属性详细信息:
(([^=]+)=(((?:“|”)([^”]+)\4)?+

您可以在该正则表达式上构建。看看:

'/<a(?:\s+(?:href=["\'](?P<href>[^"\'<>]+)["\']|title=["\'](?P<title>[^"\'<>]+)["\']|\w+=["\'][^"\'<>]+["\']))+/i'

不要使用正则表达式来解析HTML,而是使用HTML解析器。作为提示,您可能应该使用适当的HTML解析器而不是正则表达式。对HTML解析器有什么建议吗?我倾向于(不知不觉地)以艰难的方式来做事情,所以我对任何事情都不熟悉。@danl看一下中的建议。这是否回答了您的问题?
preg_match_all(
    '/<a
    (?:\s+
      (?:
         href=["\'](?P<href>[^"\'<>]+)["\']
        |
         title=["\'](?P<title>[^"\'<>]+)["\']
        |
         \w+=["\'][^"\'<>]+["\']
      )
    )+/ix', 
    $subject, $result, PREG_PATTERN_ORDER);
<a class="someclass" href="somepage.html">link text</a>
    '/<a
    (?:\s+
      (?:
         href=["\'](?P<href>[^"\'<>]+)["\']
        |
         \w+=["\'][^"\'<>]+["\']
      )
    )+/ix',