problème de regex
Forum Programmation : problème de regex
Bonjour,
J'ai une regex qui ne marche pas car je voudrai récupérer uniquement le premier mot alors qu'elle m'en récupère plusieurs, voici un exemple :
| Citation : $source = '<td><span class="Aria14_black"><b>Mercedes Classe C 220</b> CDI Elegance</span></td>';
|
et voilà ce que j'obtient :
| Citation :
|
alors que je voudrai obtenir:
source : Mercedes
modèle : Classe C 220
Quelqu'un a t'il la solution ?
Message édité par 2Dpix le 10-02-2007 à 16:45:56
up!
Bonjour,
Ce resultat est normal.
En effet, pour ta premier parenthese, le point equivaut à n'importe quel caractere, dont l'espace, donc la parenthese capture les 3 premier mots.
Je pense queton problemeserait résolu en ajoutant l'option U a la fin de ta regexp (U comme ungreedy- pas gourmand).
ta regexp serait donc:
Code :
|
Sinon, il suffit de preciser que le caraactere de la premiere parenthese est tout sauf un espace ( cad [^ ] si je ne me trompe pas ).
Voila, j'espere que ca répond à ta question.
Bonne journée
PS:Si ton probleme est resolu, merci d'editer ton premier post afin d'indiquer [resolu] dans le titre du sujet
.
merci pour l'aide, j'ai résolu le problème en mettant ([^\ ]+) . J'ai une autre petite question, comment dois je faire si je veut prendre les 2 premiers mots (donc ne prendre qu'un seul espace) ?
tu as 2 possibilités:
- utiliser le parametre U comme indiqué plus haut ou alors utiliser le ?:
Code :
|
Message édité par coca25 le 11-02-2007 à 19:15:08
t'es regex là c'est pour prendre les 2 premier mots ? J'ai testé et ça ne marche pas. peut tu expliquer le (.+ .+) et pourquoi met tu un ? ?
les 2 regexp que j'ai donné te donneront comme resultat:
Mercedes Class
C 220 CDI Elegance
en fait, par défaut, les expressions régulieres compatibles PERL sont gourmandes (ca va chercher la plus longue occurence du masque)
prenons comme source:
Mercedes Classe C 220 CDI Elegance
/.+ .+/ retournera :
- Mercedes Classe C 220 CDI
- Elegance
le ? permet de prendre la plus petite occurence:
/.+? .+/ retournera:
- Mercedes
- Classe C 220 CDI Elegance
apres faut l'adapter à ton besoin
voila
Message édité par coca25 le 11-02-2007 à 20:06:37
Merci pour les précisions. Mais j'ai essayer les regexs que tu m'as donné et elles ne marchent pas, je n'arrive pas à les corriger. Pourrai tu me dire ou est l'erreur ?
tu veux avoir quoi exactement?
avec la phrase de départ?
Mercedes Class et
C 220 Elegance .
Code :
|
tu ne peux avoir "C 220 Elegance" y a un </b> dans la phrase
oui désolé je voulais dire C 220 tout court
avec ce qui t'a ete donne avant, tu dois pouvoir trouve ton bonheur non?
oui j'ai réussi merci!
Il y a 225 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
