2009-09-16 19 views
0

Essayer de créer un simple traducteur de texte en PHP.extrait de regex/remplace les valeurs des balises de type xml via des (sous) groupes nommés

Il shoult correspondent à quelque chose comme:

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

La langue peut être facultative

Blabla <translator id="TEST"/> 

Voici le code:

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

Il extrait les "attributs", mais se sert seulement le dernier. Ma première pensée a été, il a à voir avec le nommage de groupe, quand PHP écrase les éléments de tableau (nommés) sur chaque match. Mais laisser le groupe en dehors du nom ne fait que renvoyer le dernier match.

Voici un tableau comme retourné au rappel comme exemple

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

@void: Bonjour, et bienvenue sur StackOverflow! J'ai pris la liberté d'éditer votre article, de formater les portions de code, afin qu'elles soient plus faciles à lire. Pour vos prochaines questions, cela peut être fait en utilisant l'icône avec 0 et 1 sur le dessus de la boîte d'édition; et, si nécessaire, il y a un lien sur la droite de la page "poser une question", qui pointe vers la référence de la syntaxe que vous pouvez utiliser pour écrire des questions/réponses :-) –

Répondre

1

Lorsque vous itérer un groupe, vous obtenez seulement le dernier match. Il n'y a pas moyen de contourner cela. Vous devez faire correspondre l'ensemble des attributs/valeurs, puis les analyser dans le code.