Page 1 sur 1
[R] Regex
Posté : lun. 07 janv. 2008 23:13
par TallyHo
Hello à tous
J'ai des soucis avec les regex et je n'arrive pas à capter l'aide en engliche. De plus, je ne sais pas pour vous mais j'ai des pages blanches sur votre wiki
Alors si quelqu'un peut me donner un exemple de regex, je lui serais reconnaissant. Par exemple, je voudrais récupérer tous les liens d'une page si il y a le mot "blablabla" dans le lien : <a href="
http://www.xxx.com/index.php?blablabla">blablabla</a>
Merci

Re: [..] Regex
Posté : mar. 08 janv. 2008 21:36
par sylvanie
Bonsoir,
en règle générale il faut construire le pattern (élément qu'on recherche)
de façon très simple sans chercher de suite à la coucher sur script.
Dans ton cas c'est :
tout ce qui commence par
<a href="
suivi de quelque chose
puis blablabla
puis suivi peut être de quelque chose
et qui se finit par </a>
traduction (je vais faire les mêm saut de ligne pour transposer) :
<a href="
.*
blablabla
.*
</a>
le . veut n'importe quoi sur 1 caractère (sauf fin de ligne)
le * veut dire répété 0 ou plusieures fois
reconcaténation : $pattern = '<a href=".*blablabla.*</a>'
petit exple sur une variable $url constituée de 3 url dont seules la 1 et la 3 contienne blabla :
Code : Tout sélectionner
$url='<a href="http://www.xxx.com/index.php?blablabla">blablabla</a>'&@CRLF
$url&='<a href="http://www.xxx.com/index.php?bleblabla">bleblabla</a>'&@CRLF
$url&='<a href="http://www.xxx.com/index.php?blablabla">bliblibli</a>'
$pattern='<a href=".*blablabla.*</a>' ; tout ce qui commence par <a href=" suvi de n'importe quoi puis blablabla éventuellement suivi de n'importe quoi et se terminant par </a>
$resultat=StringRegExp($url,$pattern,3) ; le mode 3 permet de retourner dans résultat un tableau de sous-chaîne correspondant à la pattern
If @error = 0 Then
; on en a trouvé
for $indice=0 To UBound($resultat)-1
MsgBox(0,"url",$resultat[$indice])
Next
EndIf
Re: [..] Regex
Posté : mar. 08 janv. 2008 22:07
par TallyHo
Super, merci pour ta réponse, je commence à cerner le truc
Mais une autre question, avec ton exemple je récupére : href="
http://www..."
Si je ne veux que le lien sans le "href", je dois faire quoi ?
Je crois comprendre dans l'aide que je dois utiliser les paranthéses, c'est ça ?
Est ce que tu peux me redonner un exemple pour ne récupérer que le lien "
http://www..." svp ?
Merci

Re: [..] Regex
Posté : mar. 08 janv. 2008 23:27
par sylvanie
Effectivement, il faut utiliser les parenthèse, reprends le même script , mais utilise cette patterne :
$pattern='<a href="(http://.*blablabla.*)".*</a>' ;
ça se lit
tout ce qui commence par <a href="http:// suivi de n'imprte quoi puis blabla puis n'imprte quoi juqu'à " suivi de n'importe quoi et finissant par </a>.
et le fait d'utiliser des parenthèses va faire une sélection à l'intérieur
Re: [..] Regex
Posté : mar. 08 janv. 2008 23:40
par TallyHo
Ok super, merci pour l'explication, il me semblait avoir compris pour le coup des () mais je n'étais pas sûr

Re: [..] Regex
Posté : mer. 09 janv. 2008 23:52
par TallyHo
Désolé mais je te relance là-dessus.
Je voudrais appliquer ce que tu m'as dit mais ça ne fonctionne pas.
Donc en gros j'ouvre une page, je récupére le HTML et je fais le regex, mais là c'est kaputt
Voici les caractéres que je veux récupérer (en gras), en sachant que ça peut changer bien sur (Rock, Classique, etc...) :
<em>Musique :</em> <strong>
Salsa</strong><br><br>
Et donc si je comprends bien je remplace Salsa par (.*) ?
Code : Tout sélectionner
$oIE = _IECreate($url)
$html = _IEBodyReadHTML($oIE)
$mus = StringRegExp($html, '<em>Musique :</em> <strong>(.*)</strong>', 3)
MsgBox(1, 'test', $mus)
Mais ça ne fonctionne pas, dans la msgbox ça m'affiche 1.
Merci pour ton aide

Re: [..] Regex
Posté : jeu. 10 janv. 2008 21:15
par sylvanie
bravo ! l'expression est parfaite !
ou est l'erreur ??? et bien qu'est ce que $mus ?
rep:c'est un tableau
est donc ton msgbox doit porter sur $mus[0] (première composante matchant l'expression régulière )
Pour éviter un retours en erreur, teste avant si stringregexp s'est correctement éxécutée avec obtention de résultat.
pour ceci 2 méthodes :
1) teste la valeur de @error juste après l'appel, si @error=0 alors $mus est bien un tableau de résultat et tu peux les afficher
2) tu peux utliser isarray($mus), ceci vaut 1 si c'est un tableau (donc résiltat ok) 0 sinon (la pattern n'a pas été atteinte)
si tu as plusieurs résultats dans $mus, inspire toi de mon premier script pour les afficher tous (la boucle for)
Re: [..] Regex
Posté : jeu. 10 janv. 2008 21:29
par TallyHo
Ah zut, je suis un bourrin, j'aurais dû le voir. Pas évident de penser à tout quand on commence à scripter

Merci encore pour l'aide

Re: [R] Regex
Posté : sam. 20 sept. 2008 13:53
par Tlem
Pour ceux et celles qui recherche le pattern d'une expression régulière, je vous recommande d'aller faire un tour sur ces deux sites :
-
regex.codes-sources
-
RegexLib
Re: [R] Regex
Posté : dim. 21 sept. 2008 04:22
par TallyHo