使用Regex将根文件夹添加到URL

时间:2011-10-04 20:07:30

标签: php regex url

我正在尝试转换PHP中的任何URL,并使用正则表达式在其上添加根文件夹。

在:

http://domainNamehere.com/event/test-event-in-the-future/

后:

http://domainNamehere.com/es/event/test-event-in-the-future/

有什么想法吗?

5 个答案:

答案 0 :(得分:0)

$url = 'http://domainNamehere.com/event/test-event-in-the-future/'; //or the function you use to grab it;
$url = str_replace('domainNamehere.com','domainNamehere.com/es', $url);

相当脏但有效而没有正则表达式,假设你的“es”文件夹总是在那个位置(我想是这样)

答案 1 :(得分:0)

如果域名始终相同,您可以使用:

$string = str_replace('domainNamehere.com', 'domainNamehere.com/es', $url);

答案 2 :(得分:0)

没有正则表达式的简单解决方案:

$root_folder = 'es';
$url = "http://domainNamehere.com/event/test-event-in-the-future/";

$p = strpos($url, '/', 8);
$url_new = sprintf('%s/%s/%s', substr($url, 0, $p), $root_folder, substr($url, $p+1));

编辑:JavaScript解决方案几乎相同:

var root_folder = 'es';
var url = "http://domainNamehere.com/event/test-event-in-the-future/";

var p = url.indexOf('/', 8);
var url_new = url.substring(0,p) + '/' + root_folder + url.substring(p);

当然,对于实时应用程序,您还应检查p是否实际分配了有效值(这意味着是否找到了斜杠),因为您的输入中可能包含无效的URL或空字符串。< / p>

答案 3 :(得分:0)

未测试:

$url = preg_replace('#(?<=^[a-z]+://[^/]+/)#i', "es/", $url);

使用'#'分隔正则表达式,以便不必转义斜杠。

(?<=...)搜索[a-z]://[^/]+/的匹配项,而不将其包含在匹配的字符串中。

[a-z]+://[^/]/匹配一系列字母后跟://后跟非斜线,然后是斜杠。这将处理所有网络协议,尤其是httphttps

i使搜索不区分大小写。

替换只是在匹配后插入es/

答案 4 :(得分:0)

这是我能想到的最简洁的方式。

$new_url = preg_replace('#(?<=\w)(?=/)#', '/en', $url, 1);

它会将第二个参数中的任何内容插入到第一个斜杠之前的字符串中,该斜杠也有一个正在进行的字母数字字符。

使用PHP 5.3.6进行测试