用另一个地址替换http://www.***的所有实例

时间:2012-07-06 12:05:17

标签: php regex replace

我有一个字符串,其中包含网站上的多个链接,但我需要将其更改为链接到其他网站。

例如,http://www.site2.com/contacthttp://www.site3.com/contact需要成为http://www.mainsite.com/contact。此处的网址和/contact只是示例,我需要查找http://的所有实例,并使用新网址替换其与下一个/之间的连接。

我有办法通过preg_replace()(或类似的,如果这是最佳选项)这样做吗?

4 个答案:

答案 0 :(得分:3)

更新:这个答案反映了这个问题,因为这个问题首先有点误导。看看Jeroens或ShogunArts.des回答

不需要正则表达式

$string = str_replace(
  array('http://www.site2.com/','http://www.site3.com/'),
  'http://www.mainsite.com/',
  $string
);

str_replace()

答案 1 :(得分:2)

  1. 匹配网址:http://daringfireball.net/2010/07/improved_regex_for_matching_urls
  2. 使用preg_replace_callback(),并在回调函数中:
    1. 使用parse_url()获取所有部分
    2. host部分替换为mainsite.com

答案 2 :(得分:1)

这样的事情应该这样做:

$pattern = '#(http://)([a-z0-9.-])+/+([a-z0-9.-])#i';
$oldurl = 'http://www.site2.com/contact';
$replacement = '$1www.mainsite.com/$3';

$newurl = preg_replace($pattern, $replacement, $oldurl);

修改

$string = 'String with many URLs';

echo replaceUrls($string);

function replaceUrls($string) {
    $pattern = '#(http://)([a-z0-9.-])+/+([a-z0-9.-]|)#i';
    $replacement = '$1www.mainsite.com/$3'; 

    return preg_replace($pattern, $replacement, $string); 
}

答案 3 :(得分:0)

用新网站名称替换正则表达式(?<=http://)(www\.site2\.com)(?=/contact)