Вы могли бы сделать что-то вроде этого:
$regex = '#^'.preg_quote($actual_lang, '#').'(?=/|$)#';
$new_uri = preg_replace($regex, $lang, $uri);
Последний шаблон захвата в основном означает «совпадать, только если следующий символ - косая черта или конец строки» ...
Редактировать:
Если код, который вы всегда хотите заменить, находится в начале пути, вы всегда можете сделать:
if (stripos($url, $actual_lang) !== false) {
if (strpos($url, '://') !== false) {
$path = parse_url($url, PHP_URL_PATH);
} else {
$path = $url;
}
list($language, $rest) = explode('/', $path, 2);
if ($language == $actual_lang) {
$url = str_replace($path, $lang . '/' . $rest, $url);
}
}
Это немного большекод, но он должен быть достаточно надежным.Вы всегда можете создать класс, который сделает это за вас (анализируя, заменяя, а затем перестраивая URL) ...