0

尝试在 PHP 中创建一个简单的文本翻译器。

它应该匹配如下:

Bla bla {translator id="TEST" language="de"/}

语言可以是可选的

Blabla <translator id="TEST"/>

这是代码:

$result = preg_replace_callback(
  '#{translator(\s+(?\'attribute\'\w+)="(?\'value\'\w+)")+/}#i',
  array($this, 'translateTextCallback'), 
  $aText
);

它提取“属性”,但只获取最后一个。我的第一个想法是,它与组命名有关,当 PHP 在每次匹配时覆盖(命名)数组元素时。但省略组命名它也只返回最后一场比赛。

这是一个返回给回调的数组作为示例

Array
(
    [0] => {translator id="TEST" language="de"/}
    [1] =>  language="de"
    [attribute] => language
    [2] => language
    [value] => de
    [3] => de
)
4

1 回答 1

1

当你迭代一个组时,你只会得到最后一个匹配。没有办法解决这个问题。您需要匹配整组属性/值,然后在代码中解析它们。

于 2009-09-16T20:29:32.793 回答