Regex récalcitrante

Petit nouveau ! | 2 Messages

04 févr. 2011, 23:29

Bonsoir à tous !

Je planche sur un problème de regex depuis maintenant plusieures heures et je ne vois pas d'autres solutions que de venir vous demander conseil !
Via une regex, j'extrait une chaîne d'un texte. Dans cette chaîne, il ne doit pas y avoir le caractère ">" SAUF si il est précédé de "$this-". :shock:
J'ai bien essayé d'utiliser (?<=\$this)> mais ça ne fonctionne pas, la chaîne n'est pas récupérée. #-o
De plus, cette solution ne capture pas $this (parenthèses non capturantes) or j'ai besoin que toute la chaîne, y compris cette partie soit récupérée :!:

Merci d'avance,

Aetapu

ViPHP
ViPHP | 5462 Messages

05 févr. 2011, 00:18

tu parses du PHP ?

Petit nouveau ! | 2 Messages

05 févr. 2011, 00:31

oui pourquoi ?
en fait je fait un moteur de template maison (pas besoin de beaucoup de fonction donc c'est plus simple de le faire moi même que d'en utiliser un tout fait, et puis, ça me fait la main)

le script lit le text, s'il detecte un <if cond="X">, il le remplace par "if (cond) {".
Le pattern initial semble tout simple : il suffit de chopper tous les caractères entre cond=" et ">, sauf si on met un deuxième if : <if cond="Y"> à la suite, ce pattern renvoie :
X"><if cond="Y
.

Je dois donc écrire une regex qui selectionne X, X qui est une chaine ne contenant pas > (comme ça je m'arrête au premier, au lieu d'aller jusqu'à celui du second if).

Le problème c'est que les variables dans X sont sous forme $this->var, je dois donc accepter le > dans ce cas là.

Une solution aurait été de refuser les chaines contenant : "> mais j'ai une balise <else> qui n'a pas de ".

Merci de l'attention que tu portes à mon message :)

ViPHP
ViPHP | 5462 Messages

05 févr. 2011, 00:57

c'est pour ca que dans les moteur de template c'est des { par exemple
mais pas besoin de t'embêter utilise les options ungready :wink:
\<if cond="(.*?)"\>