2013-06-21 2 views
1

Пользователь Stackoverflow Казимир и Ипполит дал мне эту удивительную функцию, чтобы заменить струны, как [[то]] с локализованными строками возвращается с $ этого -> _() функции.Php регулярное выражение: замена строки локализации

$that = $this; 
$view = preg_replace_callback('~\[\[\K(?>[^]]++|](?!]))*~', function ($m) use ($that) { 
    return $that->__($m[0]); }, $view); 

Он работает, за исключением того, что он не заменяет скобки. Итак, если у меня есть «Да | Ja» мой файл I18n, и в моем файле просмотра я пишу [[Да]] он встречается с [[Ja]].

Я потратил несколько часов на поиски и поиск в Интернете, но, к сожалению, ничего. Есть идеи?

ответ

1

К сожалению, вы можете заменить рисунок на:

$that = $this; 
$view = preg_replace_callback(
     '~\[\[((?:[^]]+|](?!]))*+)]]~', function ($m) use ($that) { 
     return $that->__($m[1]); }, $view); 
+0

Это отлично работает, спасибо! –

1

Это будет захватить две квадратные скобки \K\[\[(?>[^]]++|](?!]))]]*

Ввод текста

like [[ yes|ja ]] with 

Матчей

[0] => [[ yes|ja ]] 
[1] => yes|ja 

Я "м не питона программист, но я думаю, что вы» Я хочу изменить ваш сценарий таким образом:

$that = $this; 
$view = preg_replace_callback('~\K\[\[(?>[^]]++|](?!]))]]*~', function ($m) use ($that) { 
    return $that->__($m[1]); }, $view);