regex qui ne marche pas - PHP - Programmation
Marsh Posté le 10-02-2007 à 18:08:09
<b>([^ ]+) (.+?)</b>
Marsh Posté le 11-02-2007 à 18:58:09
Merci pour la solution. A quoi correspond le ? dans les deuxiemes paranthèses ?
Et si je veut que les premières paranthèses captures les deux premiers mots, comme,t dois-je m'y prendre ?
Marsh Posté le 11-02-2007 à 21:25:03
hugoOo a écrit : Merci pour la solution. A quoi correspond le ? dans les deuxiemes paranthèses ? |
Ça passe le "+" en mode "paresseux" (marche sur un "*" aussi). Typiquement, sur un truc du style :
FOOaaaaaaBARaaaaaaBARblablabla
FOO(a*?)BAR capturera FOOaaaaaaBAR (il est "paresseux", il s'arrête au premier "BAR" trouvé), alors que
FOO(a*)BAR capturera FOOaaaaaaBARaaaaaaBAR (il s'arrête au dernier "BAR" de la chaîne).
Il y a une option que tu peux ajouter à ton masque pour rendre les */+ paresseux par défaut, voir doc.
Citation : |
<b>([^ ]+ [^ ]+) (.+?)</b>
Marsh Posté le 11-02-2007 à 23:40:57
Ouais voilà c'est U l'option en question.
Marsh Posté le 10-02-2007 à 17:10:17
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 :
$source = '<td><span class="Aria14_black"><b>Mercedes Classe C 220</b> CDI Elegance</span></td>';
preg_match('#<td><span[^>]+><b>(.+) (.+)</b>#', $source, $infos);
echo 'source: '.$source.'<br />';
echo 'Marque : '.$infos[1].'<br />';
echo 'Modèle : '.$infos[2].'<br />';
et voilà ce que j'obtient :
source: Mercedes Classe C 220 CDI Elegance
Marque : Mercedes Classe C
Modèle : 220
alors que je voudrai obtenir:
source : Mercedes
modèle : Classe C 220
Quelqu'un a t'il la solution ?