正则表达式/ php更改url格式

时间:2012-07-28 13:50:24

标签: php regex preg-replace

我被赋予了更新一个相当丑陋,过时的网站的任务,该网站有数百个城市的信息,所有城市都位于他们自己的子域中,例如:

  

london.sitedomain.com

计划是摆脱所有这些子域名并将网站正确设置为页面,格式如下:

  

sitedomain.com/london

不幸的是,有一个大量的,硬编码的列表组成了一个下拉菜单,看起来像这样(但有数百个):

<a href="http://sydney.sitedomain.com">Sydney</a>
<a href="http://auckland.sitedomain.com"> Auckland</a>
<a href="http://melbourne.sitedomain.com"> Melbourne</a>
<a href="http://perth.sitedomain.com"> Perth</a>
<a href="http://wellington.sitedomain.com"> Wellington</a>

如果我把这个庞大的列表设置为一个php字符串,是否有一个体面的方法可以将每个子域子字符串批量更改为正确的格式,如上所述?或者你能想到更好的解决方案吗?

4 个答案:

答案 0 :(得分:2)

我认为你最好在Notepad ++或Sublime Text这样的程序中使用搜索和替换。两者都可以进行正则表达式搜索和替换文件夹(和子文件夹。)我不认为PHP对于一堆硬编码链接来说是最好的解决方案(可以做到,但更简单,更可靠)这样。)

使用以下正则表达式:

search:  http://(.*?)\.sitedomain.com
replace: http://sitedomain.com/\1

可能可能在PHP中使用那些搜索和替换字段,但如果您只需要更改一堆HTML文件,那么我认为使用文本编辑器要好得多。

答案 1 :(得分:1)

如果您的链接是动态的(即不是硬编码的),请更改它们分配给HTML模板的方式。以下应该有效:

$newurl = preg_replace("#(?:https?://)?(\w+)\.sitedomain\.com/(.*)#i", "sitedomain.com/$1/$2", $oldurl);

如果您的链接是静态的,请使用任何高级文本编辑器(Notepad ++,Gedit,TextMate等)并选择Search and Replace。上面preg_replace的第一个参数是Search字段,第二个参数是Replace

答案 2 :(得分:0)

你可以做的一件事是,爆炸并获取第一个字符串并将其附加到剩余的包括/

答案 3 :(得分:0)

我建议您使用.htaccess中的reg exp进入不同的路径并自动化该过程。这样你甚至不需要写那个大清单

类似的东西:

RewriteCond %{HTTP_HOST} ^((www\.)?[^.]+)\.sitedomain\.com.*$
RewriteRule (.*) http://sitedomain.com/%1 [L]

这将抓取www(如果有),然后是子域并将子域追加到url