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 に答える