1

Stackoverflow 用户 Casimir et Hippolyte 给了我这个很棒的函数,用$this->_()函数返回的本地化字符串替换像[[ Something ]]这样的字符串。

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

它可以工作,只是它不能替换括号。所以,如果我有“Yes|Ja”我的 I18n 文件,并且在我的视图文件中我写[[ Yes ]]它会出现[[ Ja ]]

我花了几个小时尝试和谷歌搜索,但不幸的是 - 没有。有任何想法吗?

4

2 回答 2

1

这将捕获两个方括号 \K\[\[(?>[^]]++|](?!]))]]*

输入文本

like [[ yes|ja ]] with 

火柴

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

我不是 python 程序员,但我想你会想把你的脚本修改成这样:

$that = $this;
$view = preg_replace_callback('~\K\[\[(?>[^]]++|](?!]))]]*~', function ($m) use ($that) {
   return $that->__($m[1]); }, $view);
于 2013-06-22T01:20:30.910 回答
1

抱歉,您可以通过以下方式替换您的模式:

$that = $this;
$view = preg_replace_callback(
        '~\[\[((?:[^]]+|](?!]))*+)]]~', function ($m) use ($that) {
        return $that->__($m[1]); }, $view);
于 2013-06-22T06:39:13.477 回答