Page 1 sur 2
Exemples d'utilisation des expressions régulières
Publié : dim. 24/févr./2008 1:30
par erix14
Voici deux exemples d'utilisation des expressions régulières.
Récupération des adresses mail dans un texte :
Code : Tout sélectionner
If CreateRegularExpression(0, "[a-zA-Z0-9\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z]+")
Dim result$(0)
Debug "Extraire les adresses email d'un texte :"
MaChaine.s = "bla bla bla |erix14@purebasic.fr bla bla(michel.dobro@purebasic.fr) bla bla .'denis@purebasic.fr'. bla bla La@fin"
Debug MaChaine
a = ExtractRegularExpression(0, MaChaine, result$())
a$ = ReplaceRegularExpression(0, MaChaine, "EMAIL")
For k=0 To a-1
Debug result$(k)
Next
Debug Str(a)+" adresses ont été trouvées."
Debug a$
Else
Debug RegularExpressionError()
EndIf
Lister les titres du forum de la rubrique débutant :
Code : Tout sélectionner
#RecupTitres = 1
#SupprimeTag = 2
URLForum.s = "http://www.purebasic.fr/french/viewforum.php?f=1"
FichierTMP.s = Space(2000)
If URLDownloadToCacheFile_(0, URLForum, FichierTMP, Len(FichierTMP), 0, 0) = #S_OK
If ReadFile(0, FichierTMP)
Longueur = Lof(0)
*MemoryID = AllocateMemory(Longueur)
If *MemoryID And Longueur
ReadData(0, *MemoryID, Longueur)
HTML.s = PeekS(*MemoryID, Longueur)
If CreateRegularExpression(#RecupTitres, "<a.+topictitle.+</a>") And CreateRegularExpression(#SupprimeTag, "<[^>]+>")
Dim result$(0)
Debug "Titres du forum PureBasic => Débutants :"
a = ExtractRegularExpression(#RecupTitres, HTML, result$()); On récupère les liens des titres
For k=0 To a-1
Debug " - "+ReplaceRegularExpression(#SupprimeTag, result$(k), ""); On enlève les tags
Next
Debug Str(a)+" titres ont été trouvées."
Else
Debug RegularExpressionError()
EndIf
EndIf
EndIf
Else
Debug "Désolé ! Problème d'accès au forum PureBasic"
EndIf
Publié : dim. 24/févr./2008 10:38
par nico
J'aurais bien voulu tester ton code mais la bêta 2 ne fonctionne pas chez moi, même en téléchargeant un fichier du Forum anglais!
C'est pas grave, je vais attendre, mais cette comande "CreateRegularExpression" à l'air d'être très puissantes.
Publié : dim. 24/févr./2008 10:56
par venom
bonjour,
chez moi les deux code fonctionne parfaitement

. très pratique en effet cette fonction de
RegularExpression. c'est une lib que tu est en train de faire erix14 ?
oui sa a l'aire prometteur.
@++
Publié : dim. 24/févr./2008 11:09
par erix14
Elle est très puissante dans le sens qu'on peut faire beaucoup de choses avec très peu de code et donc de temps. Je n'ai pas testé sa rapidité, mais je pense qu'il doit y avoir une grosse différence avec un code optimisé pour une tâche spécifique.
@venom, non, ce sont les nouvelles fonctions de la future version de PureBasic actuellement en Beta 2
Publié : dim. 24/févr./2008 12:42
par venom
a ok merci je ne savais pas que la beta 2 était sortie

je file installer sa de suite

.
@++
Publié : dim. 24/févr./2008 22:54
par Ar-S
C'est excellent et ultra rapide !
est-ce cela fonctionne sur un flux RSS ?
Publié : lun. 25/févr./2008 19:04
par erix14
Non, ce n'est pas un flux RSS. Sinon j'aurai utilisé les fonctions XML. Le programme récupère tout le code HTML de la page du forum et ensuite recherche les titres grâce aux expressions régulières.
Mais oui, cela peut donner des idées pour récupérer des données sur un site qui ne propose pas de flux RSS

Publié : mar. 26/févr./2008 8:49
par erix14
Voici maintenant un programme qui parcoure le Web de façon récursive à la recherche d'email. Il s'arrête après avoir trouvé 10 emails, pour faire une recherche plus conséquente il faut une autre méthode, car la mémoire fini par saturé...
Code : Tout sélectionner
#RecupLien = 1
#RecupEmail = 2
URL.s = "http://www.tf1.fr"
Global NewList ListeURL.s()
Global NewList ListeEmail.s()
Global NombreEmail = 0
Procedure VisitePage(LienURL.s)
If NombreEmail = 10 : ProcedureReturn : EndIf
ForEach ListeURL()
If LienURL = ListeURL() : ProcedureReturn : EndIf ; la page a été déjà visitée ?
Next
AddElement(ListeURL()) : ListeURL() = LienURL ; on mémorise le nom de la page pour ne pas la visiter une deuxième fois
Debug "Page : "+LienURL
Protected FichierTMP.s = Space(2000)
If URLDownloadToCacheFile_(0, LienURL, FichierTMP, Len(FichierTMP), 0, 0) = #S_OK
If ReadFile(0, FichierTMP)
Protected Longueur = Lof(0)
Protected *MemoryID = AllocateMemory(Longueur)
If *MemoryID And Longueur
ReadData(0, *MemoryID, Longueur)
HTML.s = PeekS(*MemoryID, Longueur)
Protected Dim ListeResult.s(0)
Protected a = ExtractRegularExpression(#RecupEmail, HTML, ListeResult()) ; On récupère les emails
For k=0 To a-1
ForEach ListeEmail()
If ListeEmail() = ListeResult(k) : Break 2 : EndIf ; si l'email existe déjà, il ne faut pas l'enregistrer
Next
AddElement(ListeEmail()) : ListeEmail() = ListeResult(k)
NombreEmail + 1
Debug "----------------------------> Email "+Str(NombreEmail)+" : "+ListeResult(k)
If NombreEmail = 10 : ProcedureReturn : EndIf
Next
Dim ListeResult.s(0)
a = ExtractRegularExpression(#RecupLien, HTML, ListeResult()) ; On récupère les URLs
For k=0 To a-1
VisitePage(ListeResult(k)) ; parcours récursif des pages
Next
FreeMemory(*MemoryID)
EndIf
EndIf
EndIf
EndProcedure
If CreateRegularExpression(#RecupLien, "http://[a-z0-9\-\.]+") And CreateRegularExpression(#RecupEmail, "[a-zA-Z0-9\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z]+")
VisitePage(URL)
EndIf
Debug "Fin de la recherche"
Publié : mar. 26/févr./2008 22:20
par comtois
tu n'as plus qu'à y joindre quelques fonctions de la lib mail pour envoyer un petit coucou à toutes ces adresses mails

Publié : mar. 26/févr./2008 23:20
par erix14
Wouai! ça devient de plus en plus facile de se faire un robot Spameur... Mais c'est pas bien de faire ça!

Publié : mar. 26/févr./2008 23:35
par Jacobus
Dans cette partie :
Code : Tout sélectionner
If CreateRegularExpression(#RecupLien, "http://[a-z0-9\-\.]+") And CreateRegularExpression(#RecupEmail, "[a-zA-Z0-9\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z]+")
VisitePage(URL)
EndIf
Les expressions régulières, c'est du standard ou tu as déterminé les caractères à chercher d'une façon particulière?
[a-zA-Z0-9\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z] ???
Publié : mer. 27/févr./2008 0:10
par erix14
Sur le web il existe toute sorte d'expression régulière pour les emails. Celle-là, je l'ai pondu moi-même, mais au final elles se ressemblent toutes. Je n'ai pas de méthode particulière, il suffit de savoir ce que l'on cherche. Par exemple, si tu veux chercher tous les mots d'un texte, il faut savoir quels caractères peuvent composer un mot. Dans l'exemple si dessous, un mot doit être composé de caractères compris entre a et z, A et Z et les caractères é,è,ç
Code : Tout sélectionner
If CreateRegularExpression(0, "[a-zA-Zéèç]+")
Dim result$(0)
MaChaine.s = "Les expressions régulières, c'est du standard ou tu as déterminé les caractères à chercher d'une façon particulière?"
Debug MaChaine
a = ExtractRegularExpression(0, MaChaine, result$())
For k=0 To a-1
Debug result$(k)
Next
Debug Str(a)+" mots ont été trouvées."
Else
Debug RegularExpressionError()
EndIf
Les expressions régulières peuvent faire peur quand on les voit, mais en réalité c'est très simple.
Publié : mer. 27/févr./2008 12:54
par erix14
Dans mon dernier exemple, on peut aussi faire la démarche inverse. C'est à dire, indiquer les caractères qui ne composent pas un mot : l'espace, l'apostrophe, la virgule, le point d'interrogation,...
Code : Tout sélectionner
If CreateRegularExpression(0, "[^ ',\?]+")
Dim result$(0)
MaChaine.s = "Les expressions régulières, c'est du standard ou tu as déterminé les caractères à chercher d'une façon particulière?"
Debug MaChaine
a = ExtractRegularExpression(0, MaChaine, result$())
For k=0 To a-1
Debug result$(k)
Next
Debug Str(a)+" mots ont été trouvées."
Else
Debug RegularExpressionError()
EndIf
Publié : mer. 26/mars/2008 12:23
par Fortix
Salutation
J'aimerais tellement obtenier la derniere version bêta 2,
mais je ne sais pas comment
car mon plus grand souhait serait de pouvoir créer des expressions régulieres façon @Erix
merci

Publié : mer. 26/mars/2008 12:37
par Backup
Fortix a écrit :Salutation
J'aimerais tellement obtenier la derniere version bêta 2,
mais je ne sais pas comment
car mon plus grand souhait serait de pouvoir créer des expressions régulieres façon @Erix
merci

repeté 20000 fois
tu vas ici :
http://www.purebasic.com/securedownload/Login.php
tu entre ton login et passe (ton email+ton pass donné au moment de l'achat)
et tu accede a ton espace de telechargement ..