1

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

例如,http://www.site2.com/contact并且http://www.site3.com/contact需要变成http://www.mainsite.com/contact。URL 在这里,/contact只是示例,实际情况是我需要找到所有实例http://并将其与下一个之间的内容替换/为新的 URL。

我有办法做到这一点preg_replace()(或类似的,如果这是最好的选择)?

4

4 回答 4

3

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

不需要正则表达式

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

str_replace()

于 2012-07-06T12:07:37.983 回答
2
  1. 匹配网址:http ://daringfireball.net/2010/07/improved_regex_for_matching_urls
  2. 使用preg_replace_callback(),并在回调函数中:
    1. 使用parse_url()获取所有部分
    2. host零件更换为mainsite.com
于 2012-07-06T12:08:46.680 回答
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); 
}
于 2012-07-06T12:29:28.833 回答
0

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

于 2012-07-06T12:07:16.973 回答