2009-06-06 4 views
4

J'ai besoin d'aide pour créer une regex pour mon script PHP. Fondamentalement, j'ai un tableau associatif contenant mes données, et je veux utiliser preg_replace pour remplacer certains espaces-titulaires avec des données réelles. L'entrée serait quelque chose comme ceci:PHP regex templating - trouver toutes les occurrences de {{var}}

<td>{{address}}</td><td>{{fixDate}}</td><td>{{measureDate}}</td><td>{{builder}}</td> 

Je ne veux pas utiliser str_replace, parce que le tableau peut contenir beaucoup plus d'articles que j'ai besoin. Si je comprends bien, preg_replace est capable de prendre le texte qu'il trouve dans la regex, et de le remplacer par la valeur de cette clé dans le tableau, par exemple.

<td>{{address}}</td> 

obtenir remplacé par la valeur de $ remplacer [ 'adresse']. Est-ce vrai, ou ai-je mal interprété les documents php? Si c'est vrai, quelqu'un pourrait-il m'aider à me montrer une regex qui l'analysera pour moi (j'apprécierais que vous expliquiez comment cela fonctionne, puisque je ne suis pas encore très bon avec les regex).

Merci beaucoup.

Répondre

8

Utilisez preg_replace_callback(). C'est incroyablement utile pour ce genre de chose.

$replace_values = array(
    'test' => 'test two', 
); 
$result = preg_replace_callback('!\{\{(\w+)\}\}!', 'replace_value', $input); 

function replace_value($matches) { 
    global $replace_values; 
    return $replace_values[$matches[1]]; 
} 

Fondamentalement, il dit trouver toutes les occurrences de {{...}} contenant des caractères de texte et remplacez cette valeur à la valeur à partir d'une table de recherche (étant les replace_values ​​globales de $).

+0

Merci, cela semble être exactement ce que je recherchais. –

+0

moi aussi, en utilisant pour la localisation, merci beaucoup –

+0

Je suis d'avis ou non d'espaces autour de la durée réelle rendant le modèle regex ' '! \ {\ {\ S? (\ W +) \ s? \} \}! ' permettant ainsi non seulement «{{term}}» mais aussi «{{term}}», «{{term}}» et «{{term}}» – Michael

0

Pour une analyse syntaxique HTML/XML correcte, envisagez d'utiliser le Document Object Model (DOM) en conjonction avec XPath. C'est beaucoup plus amusant à utiliser que des expressions rationnelles pour ce genre de chose.

+0

Bien que ce soit une position raisonnable si vous' Si vous effectuez des recherches textuelles sur des balises ou des attributs HTML, cette syntaxe est si spécifique (accolades doubles) que vous ne rencontrez pas les problèmes normaux d'expressions rationnelles HTML car cette séquence de caractères ne peut pas se produire sauf si vous le souhaitez. L'analyse syntaxique HTML est floconneuse mais ce n'est pas le cas. – cletus

0

Existe-t-il une variante de ce qui peut donner une liste des variables remplacées et quels fichiers et numéros de ligne correspondent?

+0

pour les variables remplacées, dans replace_value() ajoute le nom de la variable à un tableau - cependant, les numéros de fichier/ligne nécessitent probablement plus d'informations de regex, que je ne peux pas vous fournir –

Questions connexes