我想将target="_blank"
添加到<a>
标记以在新页面中打开该链接,因此我找到了此RegEx:
$content = preg_replace('/(<a href[^<>]+)>/is', '\\1 target="_blank">', $content);
此操作没有任何问题,但此代码会将target="_blank"
添加到所有链接,我只想添加href
将以http://
开头的链接
我该怎么做?
答案 0 :(得分:3)
您已在此处要求提供正则表达式,但该作业并非tool。
$doc = new DOMDocument;
$doc->loadHTML($html); // Load your HTML
$xpath = new DOMXPath($doc);
$links = $xpath->query('//a[starts-with(@href, "http://")]');
foreach($links as $link) {
$link->setAttribute('target', '_blank');
}
echo $doc->saveHTML();
如果您想按照评论中的建议排除内部链接,可以执行以下操作:
$links = $xpath->query('//a[starts-with(@href, "http://") and
not(starts-with(@href, "http://yoursite.com")) and
not(starts-with(@href, "http://www.yoursite.com))]');
答案 1 :(得分:0)
您可以使用此正则表达式:
(<a\b[^<>]*href=['"]?http[^<>]+)>
请参阅demo。
我已添加\b[^<>]*
以考虑href
之前的任何其他属性。
示例代码:
$re = "/(<a\\b[^<>]*href=['\"]?http[^<>]+)>/is";
$str = "<a href=\"do.com\">\n<a href=\"do.com\">\n<a another=\"val\" href=\"http://do.com\">\n";
$subst = "$1 target=\"_blank\">";
$result = preg_replace($re, $subst, $str);