正则表达式的前3个字母多数民众赞成以某种方式

时间:2019-02-04 19:58:33

标签: php regex

我有一堆下面的链接

/en
/en/admin
/en/admin/content
/en/admin/content/paragraphs
/en/admin/structure
/en/admin/structure/block
/en/admin/structure/contact

我想将/ en的出现替换为/ en-gb(/ en- $ country),并且gb一词位于变量$ country中。

最终结果将是

/en-gb
/en-gb/admin
/eb-gb/admin/content

4 个答案:

答案 0 :(得分:2)

您可以使用str_replace轻松做到这一点:

$string = str_replace('/en/', '/en-'.$country.'/', $string);

在这里,以防最短的正则表达式版本:

$string = preg_replace('/^\/[a-z]{2}/', '$0-'.$country, $string);

说明:

^        look at the begin of the string
\/       look for an / (\ is for escaping)
[a-z]{2} look for two characters a-z 

答案 1 :(得分:2)

在这里使用preg_replace可能更好,因为我们正在这里查看字符串的开头。

$string = preg_replace("/^(\/?)([a-z]{2})/", "$1$2-".$country, $string);

答案 2 :(得分:0)

您可以使用preg_replace。要仅匹配开头的模式,请使用以下正则表达式:

^\/(en)\/

如果要匹配所有两个字符串(带有单词字符),可以使用:

^\/(\w{2})\/

然后,这两个字符在第一个匹配组$1中。

答案 3 :(得分:0)

$orig可以是字符串或字符串数​​组。这将替换它在字符串中的任何位置,而不仅仅是在开头:

$lang = "en";
$country = "gb";

$orig = str_replace("$lang", "$lang-$country", $orig);

如果只需要在开始时更换:

$orig = preg_replace("#^/$lang#", "/$lang-$country", $orig);