2011-03-22 127 views
0

我有此链接: http://mysite/myfolder/it/my-keywords.html并希望更换/它/与/ ES /(2个字母国家代码)帮助我了解PHP的preg_replace函数

我可以explode()以“/”分隔符,但想了解是否preg_replace会更好。

尝试:

preg_replace("/\/([a-z]{2})/\/", $link, $country); 

编辑 答案:

preg_replace("/\/[a-z]{2}\//", "/$country/", $link); 
+1

这是更简单的,如果你选择的替代正则表达式定界符(然后可以避开逸出,这清楚地绊倒您一点):'的preg_replace(“@/[AZ] {2}/@”, $ link,$ country);' – 2011-03-22 23:37:25

+0

其他分隔符。感谢提示弗兰克! – FFish 2011-03-23 08:28:14

回答

1

的preg_replace就像一把瑞士军刀。 preg而不是ereg意味着它使用Perl兼容的正则表达式。它匹配第一个参数(正则表达式),用第三个参数(字符串)中的第二个参数(字符串)替换。

正则表达式通过使用搜索树截断技术等对效率进行了优化...所以通常是有效的替代方法。

这应该做你想做的。

preg_replace("/\/it\//","/es/","http://mysite/myfolder/it/my-keywords.html") 
+0

感谢比利向我展示正确的正则表达式,并跳过了斜杠。我认为你最好使用双引号btw ... – FFish 2011-03-22 23:29:40

0

的preg_replace是有用的,如果你只知道要匹配字符串的一部分,但其他部分是可变的。在你的情况下,/它/文件夹已经足够独特,以便静态替换工作。使用str_replace代替:

$url = str_replace("/it/", "/es/", $url); 
+0

@FFish;学习re和相关的php函数。因此,对于未来的情况,不会再要求重复一次。 – miqbal 2011-03-22 23:22:50

+0

嗨,实际上链接是动态的。我需要像preg_replace(“/ \ /([a-z] {2})/ \ /”,$ link,$ country); – FFish 2011-03-22 23:23:48

+0

@FFish;如果你已经有了合适的正则表达式,你的问题到底是什么? – mario 2011-03-22 23:25:48