[R] Regex

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
TallyHo
Niveau 1
Niveau 1
Messages : 14
Enregistré le : lun. 07 janv. 2008 23:01
Status : Hors ligne

[R] Regex

#1

Message 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 :)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Regex

#2

Message 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
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
TallyHo
Niveau 1
Niveau 1
Messages : 14
Enregistré le : lun. 07 janv. 2008 23:01
Status : Hors ligne

Re: [..] Regex

#3

Message 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 :)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Regex

#4

Message 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
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
TallyHo
Niveau 1
Niveau 1
Messages : 14
Enregistré le : lun. 07 janv. 2008 23:01
Status : Hors ligne

Re: [..] Regex

#5

Message par TallyHo »

Ok super, merci pour l'explication, il me semblait avoir compris pour le coup des () mais je n'étais pas sûr :)
TallyHo
Niveau 1
Niveau 1
Messages : 14
Enregistré le : lun. 07 janv. 2008 23:01
Status : Hors ligne

Re: [..] Regex

#6

Message 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&nbsp;:</em>&nbsp;<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&nbsp;:</em>&nbsp;<strong>(.*)</strong>', 3)
MsgBox(1, 'test', $mus)
Mais ça ne fonctionne pas, dans la msgbox ça m'affiche 1.

Merci pour ton aide :)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Regex

#7

Message 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)
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
TallyHo
Niveau 1
Niveau 1
Messages : 14
Enregistré le : lun. 07 janv. 2008 23:01
Status : Hors ligne

Re: [..] Regex

#8

Message 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 ;)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Regex

#9

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
TallyHo
Niveau 1
Niveau 1
Messages : 14
Enregistré le : lun. 07 janv. 2008 23:01
Status : Hors ligne

Re: [R] Regex

#10

Message par TallyHo »

Image
Répondre