正则表达式将url路径中的lang更改为子域

时间:2010-02-15 22:31:12

标签: php regex

我正在学习正则表达式。我有一个非常简单的问题:

我在php中有很长的内容。我想转换它所说的所有地方:

http://www.example.com/en/rest-of-url

http://en.example.com/rest-of-url

有人可以帮我这个吗?我想我使用preg_replace吗?

奖励:如果你有一个好的网站的链接,解释如何在正则表达式中做这样的最简单的事情,请发布它。我看到的每个正则表达式资源都非常复杂(甚至维基百科文章)。

6 个答案:

答案 0 :(得分:3)

在PHP中:

$search = '~http://www.example.com/([^/]+)/(.+)~';
$replace = 'http://$1.example.com/$2';
$new = preg_replace( $search, $replace, $original );

答案 1 :(得分:2)

http://regexlib.com/

有一个很好的正则表达式备忘单和测试人员

答案 2 :(得分:2)

假设:

preg_replace($regex, $replaceWith, $subject); 

$ subject是原始文本。 $ regex应该是:

'@http://([^\.]*)\.example\.com/en/(.*)@'

$ replaceWith应该是:

'http://$1.example.com/$2'

已编辑:在我的回答中,我错过了您想要捕获部分域名的事实。

答案 3 :(得分:2)

这适用于任何域名:

$url = 'http://www.example.com/en/rest-of-url';

echo preg_replace('%www(\..*?/)(\w+)/%', '\2\1', $url);

给出:

http://en.example.com/rest-of-url

参考:preg_replace

答案 4 :(得分:2)

您可以了解基本的正则表达式,但是对于您的简单问题,不需要正则表达式。

$str="http://www.example.com/en/rest-of-url";
$s = explode("/",$str);
unset( $s[3]);
print_r( implode("/",$s) ) ;

答案 5 :(得分:1)

这是Regex Tutorials

的绝佳网站

http://www.regular-expressions.info/ Regex Tutor