解析“href”标签中包含特定单词的所有链接[重复]

Posted

技术标签:

【中文标题】解析“href”标签中包含特定单词的所有链接[重复]【英文标题】:Parse All Links That Contain A Specific Word In "href" Tag [duplicate] 【发布时间】:2012-01-02 17:47:12 【问题描述】:

可能重复:Grabbing the href attribute of an A element

我需要解析包含某个单词的 html 文档的所有链接(总是不同的)。

例子:

<a href="/bla:bla">BLA</a>
<a href="/link:link">BLA</a>
<a href="/link:bla">BLA</a>

我只需要带有“href=/link: ....”的链接,最好的方法是什么?

$html = "SOME HTLM ";
$dom = new DomDocument();
@$dom->loadHTML($html);
$urls = $dom->getElementsByTagName('a');
foreach ($urls as $url)

    echo "<br> $url->getAttribute('href') , $url->getAttribute('title')";
    echo "<hr><br>";

在这个例子中显示了所有链接,我需要特定的链接。

【问题讨论】:

【参考方案1】:

使用正则表达式。

foreach ($urls as $url)

    $href = $url->getAttribute('href');
    if (preg_match("/^\/link:/",$href)
        $links[$url->getAttribute('title')] = $href;
    

$links 数组包含所有匹配的标题和 href。

【讨论】:

正则表达式是相对昂贵的操作,应尽可能避免在循环中使用它们。 substr() 在这种情况下很好。 没错,但从他的设置来看,我有一种奇怪的感觉,以后会变得更复杂。 在真正需要之前无需增加复杂性 :)【参考方案2】:

通过使用条件。

<?php 
$lookfor='/link:';

foreach ($urls as $url)
    if(substr($url->getAttribute('href'),0,strlen($lookfor))==$lookfor)
        echo "<br> ".$url->getAttribute('href')." , ".$url->getAttribute('title');
        echo "<hr><br>";
    

?>

【讨论】:

【参考方案3】:

由于 getAttribute 只返回一个字符串,因此您只需使用 strpos() 检查它以什么开头。

$href = $url -> getAttrubute ('href');
if (strpos ($href, '/link:') === 0)

    // Do your processing here

【讨论】:

【参考方案4】:

您可以使用XPath 直接在文档中查询这些节点,而不是先获取所有 a 元素然后过滤掉您需要的元素:

//a[contains(@href, "link:")]

此查询将在 包含 href 属性 字符串 link: 的文档中找到 所有 a 元素 >。

检查href属性是否开头的链接:可以这样做

//a[starts-with(@href, "link:")]

完整示例 (demo):

$dom = new DomDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//a[contains(@href, "link:")]') as $a) 
    echo $a->getAttribute('href'), PHP_EOL;

另请参阅

Implementing condition in XPath excluding URLs from path links? PHP/XPath: find text node that "starts with" a particular string? PHP Xpath : get all href values that contain needle

相关问题。

注意:标记此 CW 是因为有许多相关问题

【讨论】:

谢谢。你能解释一下“CW”是什么吗? @Ron CW = 社区维基。我没有从中获得声誉。

以上是关于解析“href”标签中包含特定单词的所有链接[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python数据框-如何选择名称中包含特定子字符串的所有列[重复]

我的逻辑有啥问题?尝试计算文件中包含特定字符的单词数量

PHP 中包含特定单词的字符串的条件

Python 3,如果列表中包含特定的东西,如何删除部分元素3 [重复]

如何在 R 中导入文件名中包含特定单词的 .csv 文件?

在cmake的所有cpp文件中包含c ++标头[重复]