我正在尝试编写一个RegEx,它使用rel =“nofollow”属性查找网页上的所有链接。请注意,我是RegEx newb所以请不要对我严厉:)
这是我到目前为止所得到的:
$link = "/<a href=\"([^\"]*)\" rel=\"nofollow\">(.*)<\/a>/iU";
显然这是非常有缺陷的。任何其他属性的链接或风格稍有不同(单引号)都不会匹配。
答案 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";