Une regex avec preg_match

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 : Une regex avec preg_match

Re: Une regex avec preg_match

par hamzafes » 20 oct. 2009, 18:49

merci bien, les deux techniques fonctionnent parfaitement.

une deuxième question, preg_match s'arrête au premier retour à la ligne, est-ce qu'on peut changer ça?

Re: Une regex avec preg_match

par Victor BRITO » 20 oct. 2009, 18:39

Bienvenue dans l'univers des captures gloutonnes ! ;)

Autrement dit, pour éviter que la capture de ton expression rationnelle n'englobe plusieurs balises entre crochets, de deux choses l'une :
  1. soit tu ajoutes un ? après le quantifiant, comme suit
    preg_match ('#[id](.+?)[end id]#', $text, $matches);
  2. soit tu ajoutes le masque U (U majuscule, pour ungreedy, qui veut dire « non glouton » en anglais) après le délimiteur de fin d'expression rationnelle, comme suit
    preg_match ('#[id](.+)[end id]#U', $text, $matches);
Si tu veux tester par toi-même, je te conseille la page de test d'expressions rationnelles de Lumadis. ;)

Une regex avec preg_match

par hamzafes » 20 oct. 2009, 18:19

Salam,

j'ai une chaine de caractères :
...[name] hamza [end name] [id]ab6789-58ss[end id] [name]mohamed[end name][id]cc6989-55s[end id]...

et je veux extraire juste le premier id . alors je fais comme ça :

preg_match("#[id](.+)[end id]#", $text, $matches);

résultat :
ab6789-58ss[end id] [name]mohamed[end name][id]cc6989-55s

preg_match ne s'arrete qu'à la deuxième balise [end id] !!!

y'a-t-il une façon de dire à preg_match de s'arrêter à la première balise [end id] ?



Merci et Allah mo3ine