RegExp:找到w / nofollow页面上的所有链接

时间:2012-02-27 20:45:31

标签: php regex

我正在尝试编写一个RegEx,它使用rel =“nofollow”属性查找网页上的所有链接。请注意,我是RegEx newb所以请不要对我严厉:)

这是我到目前为止所得到的:

$link = "/<a href=\"([^\"]*)\" rel=\"nofollow\">(.*)<\/a>/iU";

显然这是非常有缺陷的。任何其他属性的链接或风格稍有不同(单引号)都不会匹配。

2 个答案:

答案 0 :(得分:3)

您应该真正使用DOM parser来实现此目的,因为任何基于正则表达式的解决方案都容易出现这种HTML解析。考虑这样的代码:

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
// returns a list of all links with rel=nofollow
$nlist = $xpath->query("//a[@rel='nofollow']");

答案 1 :(得分:1)

试试这个:

$link = "/<(a)[^>]*rel\s*=\s*(['\"])nofollow\\2[^>]*>(.*?)<\/\\1>/i";