是否有任何正则表达式可以帮助我仅选择特定类的锚点



我想提取只有某些类的锚点的href,就像link-wrapper一样。

所以,这意味着我将拥有链接的href,如下所示:

<a href="blaa..blaa" class="link-wrapper">click here</a>

附言如果两个链接按顺序对齐,它应该提取它们,如下所示:

<a href="blaa" class="link-wrapper">link-1</a><a href="blaa" class="link-wrapper">link-2</a>

尝试了堆栈溢出中已经存在的解决方案,但没有一个适合我的问题。因为其中一些是java脚本和其他语言。我尝试寻找 DOMDocument,但要完全匹配解决方案有点困难。

绑了一些对我不起作用的preg_match,比如:

preg_match('/<a(?:(?!class=")(?:.|n))*class="(?:(?!link-wrapper)(?:.|n))*link-wrapper(?:(?!</a>)(?:.|n))*</a>/i', $content, $output_array);
您可以使用

DOMDocumentDOMXPath来获取结果。首先将 HTML 加载到DOMDocument中,然后使用 XPath 查询查找所有具有类的锚点,包括link-wrapper例如

$html = '<a href="blaa..blaa" class="link-wrapper">click here</a><a href="not.blaa" class="something-else">link-3</a>
<a href="blaa" class="link-wrapper">link-1</a><a href="blaa..again" class="link-wrapper">link-2</a>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//a[contains(@class, "link-wrapper")]') as $a) {
    $urls[] = $a->attributes->getNamedItem('href')->nodeValue;
}
foreach ($urls as $url) {
    echo "$urln";
}

输出:

blaa..blaa 
blaa 
blaa..again

3v4l.org 演示

相关内容

最新更新