>我有一个字符串,其中包含一个网站上的多个链接,但我需要更改它们以链接到另一个网站。
例如,http://www.site2.com/contact
和http://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()
- 匹配网址:http://daringfireball.net/2010/07/improved_regex_for_matching_urls
- 使用 preg_replace_callback(),并在回调函数中:
- 使用 parse_url() 获取所有部件
- 更换
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)
替换为新站点名称