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


Replace all instances of http://www.*** with another address

>我有一个字符串,其中包含一个网站上的多个链接,但我需要更改它们以链接到另一个网站。

例如,http://www.site2.com/contacthttp://www.site3.com/contact需要成为http://www.mainsite.com/contact。这里的 URL 和/contact只是示例,现实是我需要找到http://的所有实例,并将该实例和下一个/之间的连接替换为新的 URL。

我有一种方法可以通过preg_replace()做到这一点(或者如果这是最好的选择,则类似)?

更新:此答案反映问题,因为该问题首先具有轻微的误导性。看看Jeroens或ShogunArts.des答案

无需正则表达式

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

str_replace()

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

这样的事情应该这样做:

$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); 
}

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