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',