8791 sujets

Développement web côté serveur, CMS

Enfin simple... J'y arrive pas *honte*

Bref, bonjour les gens ! Je vous soumet ce petit problème : je code actuellement un template PHP et j'ai un soucis avec l'expression régulière qui repère les clés dans mon html :

les différentes clés valides sont du type :

> encadrées par {{ et }}
> pouvant contenir une ou 2 parties (séparées par un espace)
> la première partie (obligatoire) est sous la forme : alphanum ou alors alphanum.alphanum (avec un nombre indéfini de points)
> la deuxième peut contenir n'importe quoi (même des espaces) mais ne peut pas contenir le caractère }} de fin de balise et doit contenir {}

en gros les exemples de balises détectées :

{{head.title.0}}
{{tpl.url <h1>L'url est : {}</h1>}}
{{head.style.title <strong>{}</strong>}}
{{head.script <script type="text/javascript" src="{}"></script>}}

mais pas : (car il s'agit de 2 balises sur la même ligne)

{{head.style.title <strong>{}</strong>}} texte {{head.style.url <strong>{}</strong>}}
Modifié par Near (25 Jun 2008 - 09:45)
j'ai oublié de donner mon travail >.<

voici la dernière version :

#(?:\{\{){1}( )?(.*)(?:\}\}){1}#

celle ci fonctionne pour toutes les clés valides, mais la présence du .* au milieu fait que mon dernier exemple est également détecté (en une seule clé je veux dire)
Non non ^-^ le but est de coder soi même (et puis c'est instructif), le problème se situe juste dans l'expression régulière (je ne sais pas comment fonctionnent tous les templates mais pour le principe de fonctionnement je me suis inspiré de celui de phpBB en changeant pas mal de choses quand même)

EDIT :

ma nouvelle expression régulière ressemble à ça :

#(?:\{\{){1}([0-9a-zA-z.]*)(?: )?([^\}\{]*)(?:\}\}){1}#

la partie en rouge à pour fonction de repérer la deuxième partie : une chaine de caractère ne contenant ni { ni }.

Ce n'est pas ce que je voulais au départ : je veux une chaine qui ne peut pas contenir {{ ou }} mais qui accepte { ou }... Et je ne vois vraiment pas comment faire...

Modifié par Near (26 Jun 2008 - 10:13)