PHP:从文本中删除特定域的所有超链接

时间:2012-03-25 00:32:34

标签: php preg-replace preg-match

2件事:

  1. 删除指向mydomain.com&的所有超链接保留所有其他不属于此域的超链接。

  2. 对于剩余的所有其他网址,请抓取代码之间的值并将其显示为ID。

  3. 1。关于第一项任务:

    我有这个:

    $str = 'I have been searching <a href="http://www.google.com">Google</a> for all the valuable information. I have also tried <a href="http://www.yahoo.com">Yahoo</a> and I finally, ended up finding it at
    <font size="1">My Site <a style="color:#0000ff;font-family:Arial,Helvetica,sans-serif" href="http://www.mydomain.com/go.php?offer=fine&amp;pid=10" target="_blank" >My Link</a></font>. So you can visit <a href="http://www.mydomain.com/go.php?offer=ok" target="_blank">My Link</a>'; 
    

    我想要这个:

    $str = 'I have been searching <a href="http://www.google.com">Google</a> for all the valuable information. I have also tried <a href="http://www.yahoo.com">Yahoo</a> and I finally, ended up finding it at . So you can visit '; 
    

    我尝试了什么:

    我尝试了以下preg_replace但它删除了所有链接。我只是希望它从mydomain.com删除所有链接并保留其他所有内容。

    $pattern = "/<a[^>]*>(.*)<\/a>/iU";
    $final_str = preg_replace($pattern, "$1", $str);
    

    2。关于第二项任务:

    最后,我想以此结束:

    $str = 'I have been searching <a href="http://www.google.com" id="Google">Google</a> for all the valuable information. I have also tried <a href="http://www.yahoo.com" id="Yahoo">Yahoo</a> and I finally, ended up finding it at . So you can visit '; 
    

1 个答案:

答案 0 :(得分:1)

这应该分两步完成:

<?

$str = 'I have been searching <a href="http://www.google.com">Google</a> for all the valuable information. I have also tried <a href="http://www.yahoo.com">Yahoo</a> and I finally, ended up finding it at <font size="1">My Site <a style="color:#0000ff;font-family:Arial,Helvetica,sans-serif" href="http://www.mydomain.com/go.php?offer=fine&amp;pid=10" target="_blank" >My Link</a></font>. So you can visit <a href="http://www.mydomain.com/go.php?offer=ok" target="_blank">My Link</a>';

// removing the domain links
$pattern1 = '|<a [^>]*href="http://www.mydomain.com[^"]*"[^>]*>.*</a>|iU';
$str = preg_replace($pattern1, '', $str);

// adding IDs
$pattern2 = '|(<a [^>]+)>(.*)</a>|iU';
$str = preg_replace($pattern2, '$1 id="$2">$2</a>', $str);

如果你还需要摆脱<font size="1">My Site </font>部分,请告诉我。