Regex récalcitrante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Regex récalcitrante

Re: Regex récalcitrante

par stealth35 » 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="(.*?)"\>

Re: Regex récalcitrante

par aetapu » 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 :)

Re: Regex récalcitrante

par stealth35 » 05 févr. 2011, 00:18

tu parses du PHP ?

Regex récalcitrante

par aetapu » 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