Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/07/2008, 19h28   #1
Membre régulier
 
Avatar de FrontLine
 
Nicolas
Webmaster
Inscription : janvier 2008
Messages : 172
Détails du profil
Informations personnelles :
Nom : Nicolas
Âge : 30

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : janvier 2008
Messages : 172
Points : 84
Points : 84
Par défaut Eviter de répéter l'option \s (espace) ?

Bonjour,
je débute avec les Regex et je ne trouve pas comment éviter de répéter l'option \s

Exemple ici je l'ai mis 3 fois :
Code :
#<(\s)*img(.*)src(\s)*=(\s)*("?)(.+?)
Ce que j'ai voulu faire c'est :
Citation:
< (espace ou pas espace) img (tout caractère) src (espace ou pas espace) = (espace ou pas espace) (" ou pas ") (l'url de l'image que je capture dans mon preg replace).
D'ailleurs il y a surement une meilleure façon, j'utilise que les (), dans ce cas là je ne vois pas trop comment optimiser ma Regex et utiliser des [] à certains endroit plus judicieux.

Je débute et je suis un peu largué avec les Regex, si vous avez des conseils c'est avec plaisir et attention que je m'y pencherais dessus !

Merci
FrontLine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2008, 01h48   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
\s n'est pas une option mais un métacaractère. Si tu en as besoin, il faut l'utiliser !

Par contre, il est inutile de le mettre systématique dans des parenthèses capturantes. (\s)* et \s* reviennent au même si tu ne veux pas capturer les espaces.

Pour ta regex, je te conseillerais ceci :

Code :
#<\s*img.+?src\s*=\s*"?(\S+?)"?#i
qq détails :
  • .+? : n'importe quel caractère (.), répété plein de fois, mais s'arrêtant au prochain src (+? est un quantificateur paresseux, alors que + est gourmand et pourrait avaler plusieurs balises d'un coup).
  • "? : guillemet facultatif
  • (\S+?) : série de caractères non-blancs, qui sera coupée par le prochain " ou le prochain blanc (espace, retour à la ligne, tabulation, etc)
  • i final : modificateur (ou "option") rendant la regex insensible à la casse, afin que img et IMG fonctionnent tous les deux.

Pour les conseils : lire le O'Reilly de Jeffrey Friedl, la bible absolue sur la question, excellente quel que soit ton niveau.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h30.


 
 
 
 
Partenaires

Hébergement Web