Exemples d'utilisation des expressions régulières

Partagez votre expérience de PureBasic avec les autres utilisateurs.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Exemples d'utilisation des expressions régulières

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

bonjour,

chez moi les deux code fonctionne parfaitement :wink: . 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.



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message 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
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

a ok merci je ne savais pas que la beta 2 était sortie :P je file installer sa de suite :wink: .



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

C'est excellent et ultra rapide !
est-ce cela fonctionne sur un flux RSS ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message 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 :wink:
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message 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"
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tu n'as plus qu'à y joindre quelques fonctions de la lib mail pour envoyer un petit coucou à toutes ces adresses mails :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Wouai! ça devient de plus en plus facile de se faire un robot Spameur... Mais c'est pas bien de faire ça! :x
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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] ???
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message 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.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message 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
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

Salutation

J'aimerais tellement obtenier la derniere version bêta 2,
mais je ne sais pas comment 8O

car mon plus grand souhait serait de pouvoir créer des expressions régulieres façon @Erix

merci :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Fortix a écrit :Salutation

J'aimerais tellement obtenier la derniere version bêta 2,
mais je ne sais pas comment 8O

car mon plus grand souhait serait de pouvoir créer des expressions régulieres façon @Erix

merci :D
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 ..
Répondre