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
)