par
Ripat » 04 mars 2009, 08:59
Je suis en train d'apprendre une nouvelle langue : le regex (...) Ca ne me sert pas à grand chose car je suis débutant(..)
Détrompe-toi. L'apprentissage des regex te sera utile non seulement pour Php mais aussi pour de nombreux autres langages évolués tels qe Perl, Java, Python etc. Ou aussi, dans une version moins puissante il est vrai, pour des utilitaires systèmes Unix/Linux/BSD/OSX tels que awk, sed, grep et aussi pour MySQL.
Ce n'est donc jamais du temps perdu.
J'ai un string qui contient des liens comme ça :
<a href='ligue1.php'>ligue1</a><br><a href='ligue2.php'>ligue2</a><br><a href='ligue3.php'>etc.etc.
Je souhaite extraire "<a href='ligue2.php'>ligue2</a>" mais mon code plante :
(...)
Ca me récupère tous les liens, à mon avis à cause du (.*?) qui m'embarque tous les <a et >.
Comportement normal puisque tu demandes d'extraire la chaîne qui commence pa
<a (il prendra donc le premier
<a ) puis tout caractère jusqu'à ce que le moteur regex rencontre
ligue2 et ensuite tout caractère jusqu'à un
> en fin de chaîne (ancrage $).
Au lieu du dot qui prend tout caractère, utilise plutôt les classes négatives comme
[^<]+ qui prendra tout caractère tant que le moteur ne rencontre pas le caractère
<.
Entraîne-toi sur ton problème sur
ce testeur
[quote="kanaille"]Je suis en train d'apprendre une nouvelle langue : le regex (...) Ca ne me sert pas à grand chose car je suis débutant(..)[/quote]
Détrompe-toi. L'apprentissage des regex te sera utile non seulement pour Php mais aussi pour de nombreux autres langages évolués tels qe Perl, Java, Python etc. Ou aussi, dans une version moins puissante il est vrai, pour des utilitaires systèmes Unix/Linux/BSD/OSX tels que awk, sed, grep et aussi pour MySQL.
Ce n'est donc jamais du temps perdu.
[quote="kanaille"]J'ai un string qui contient des liens comme ça :
<a href='ligue1.php'>ligue1</a><br><a href='ligue2.php'>ligue2</a><br><a href='ligue3.php'>etc.etc.
Je souhaite extraire "<a href='ligue2.php'>ligue2</a>" mais mon code plante :
(...)
Ca me récupère tous les liens, à mon avis à cause du (.*?) qui m'embarque tous les <a et >.[/quote]
Comportement normal puisque tu demandes d'extraire la chaîne qui commence pa [b]<a[/b] (il prendra donc le premier [b]<a[/b] ) puis tout caractère jusqu'à ce que le moteur regex rencontre [b]ligue2[/b] et ensuite tout caractère jusqu'à un [b]>[/b] en fin de chaîne (ancrage $).
Au lieu du dot qui prend tout caractère, utilise plutôt les classes négatives comme [b][^<]+[/b] qui prendra tout caractère tant que le moteur ne rencontre pas le caractère [b]<[/b].
Entraîne-toi sur ton problème sur [url=http://www.lumadis.be/regex/test_regex.php?lang=fr&pat1=%23%3Ca%28.%2A%3F%29%28ligue2%7Cd2%29%28.%2A%3F%29%3E%24%23is&pat1typ=preg_match&pat2=%23%3Ca%5B%5E%3C%5D%2B%28ligue2%7Cd2%29%5B%5E%3E%5D%2B%23is&pat2typ=preg_match&txt=%3Ca+href%3D%27ligue1.php%27%3Eligue1%3C%2Fa%3E%3Cbr%3E%3Ca+href%3D%27ligue2.php%27%3Eligue2%3C%2Fa%3E%3Cbr%3E%3Ca+href%3D%27ligue3.php%27%3E&result=Tx]ce testeur[/url]