Page 1 sur 1

Regex récalcitrante

Posté : 04 févr. 2011, 23:29
par aetapu
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

Re: Regex récalcitrante

Posté : 05 févr. 2011, 00:18
par stealth35
tu parses du PHP ?

Re: Regex récalcitrante

Posté : 05 févr. 2011, 00:31
par aetapu
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 :)

Re: Regex récalcitrante

Posté : 05 févr. 2011, 00:57
par stealth35
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="(.*?)"\>