Expressions régulières (de m.....)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Expressions régulières (de m.....)

Message par Chris »

J'ai besoin d'un coup de main. :roll:

Avec une expression régulière, comment extraire une chaine qui est entre deux balises?
J'ai essayé tout un tas de trucs, je dois être très con, (je sais que certains en sont même convaincus :mrgreen:), mais j'arrive à rien avec ces foutues expressions régullières.


Voilà une chaine pour l'exemple :

Code : Tout sélectionner

n$ = "<strong>ABCDEFGHIJ</strong>"
Je veux récupérer ce qu'il y a entre les balises, (mais sans les balises, évidemment), c'est à dire uniquement "ABCDEFGHIJ".
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Expressions régulières (de m.....)

Message par Guimauve »

Juste comme ça, est-ce que c'est suffisant ?

Code : Tout sélectionner

n$ = "<strong>ABCDEFGHIJ</strong>"
Debug StringField(StringField(n$, 2, ">"), 1, "<")
A+
Guimauve
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Expressions régulières (de m.....)

Message par Chris »

Il fallait bien qu'il y en ait au moins un qui réponde à côté de la plaque!

C'est toi le gagnant! :mrgreen:
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Expressions régulières (de m.....)

Message par Guimauve »

Chris a écrit :Il fallait bien qu'il y en ait au moins un qui réponde à côté de la plaque!

C'est toi le gagnant! :mrgreen:
C'est à dire ? Non attend, tu tiens absolument à te faire chi... avec les expression régulière !!!
N'ayons pas peur des mots, un titre du genre
Expressions régulières (de m.....)
moi je l'interprète comme suit:
Expression Régulière de MERDE

Sérieusement, tu considère le truc comme de la véritable merde mais tu veux continuer de l'utiliser et après ça c'est moi l'andouille qui répond à coté de la plaque.

WOW !!! BRAVO CHAMPION !

A+
Guimauve
Dernière modification par Guimauve le ven. 15/avr./2011 21:12, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Expressions régulières (de m.....)

Message par Chris »

Avec une expression régulière, comment extraire une chaine qui est entre deux balises?
Désolé, mais si tu ne sais pas lire, je ne peux rien faire pour toi.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Expressions régulières (de m.....)

Message par case »

c'est prise de tête quand même

Code : Tout sélectionner

n$ = "<strong>ABCDEFGHIJ</strong>"
exp=CreateRegularExpression(#PB_Any,"(<[[:alnum:]]*>)|(</[[:alnum:]]*>)")
Debug ReplaceRegularExpression(exp,n$,"")
FreeRegularExpression(exp)
ImageImage
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Expressions régulières (de m.....)

Message par Chris »

Alors là, Image

Pile-poil ce que je cherchais. Merci. :wink:
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Expressions régulières (de m.....)

Message par G-Rom »

@Case
Elle est foireuse ta regex :D
n$ = "<strong>ABCDEFGHIJ</stronsssssssg>"
exp=CreateRegularExpression(#PB_Any,"(<[[:alnum:]]*>)|(</[[:alnum:]]*>)")
Debug ReplaceRegularExpression(exp,n$,"")
FreeRegularExpression(exp)
Dernière modification par G-Rom le sam. 16/avr./2011 9:25, modifié 1 fois.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Expressions régulières (de m.....)

Message par case »

pourquoi ? :) elle fonctionne pourtant...

mais j'avoue que j'ai pas tout compris...
ImageImage
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Expressions régulières (de m.....)

Message par Chris »

Elle fonctionne très bien sa regex.

J'ai essayé de modifier les balises, ça marche quand même.
De toute manière, ça va servir à extraire des données dans une page web. Il y a peu de chance que les balises soient mal orthographiées. :wink:
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Expressions régulières (de m.....)

Message par Geo Trouvpatou »

Salut.

@Case

1) Pourquoi des doubles [[ et ]]
2) A quoi correspond le *
3) A quoi correspond le |

Parce que je doit t'avouer que pour extraire un mot entre du bbcode, pour les truc simples, j'utilise la même méthode que Guimauve.

Pour le 1 si c'est pour échapper le 1er [, moi j'utilise le \.
C'est mon problème, autant en php je peux faire une regex simplète, qu'en PB je galère.

[EDIT] Chez moi aussi cela fonctionne bien, c'est peut-être sous Linux que ça déconne ?
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Expressions régulières (de m.....)

Message par case »

parce qu’en fait les [:alnum:] c'est un peu comme des mots deja définis ou des fonctions.

enfin j'y connais rien en expressions régulières et j'y comprend pas grand chose ,)

si G-rom me dit qu'elle sent le pâté la mienne je veux bien le croire sur parole :mrgreen:

edit
elle fonctionne mais elle n'est pas fiable. dans le sens ou elle extrait le contenu entre balises même si les balises sont différentes

exemple

<strong> blablabla </bouh> ca marche quand même ... alors que normalement on devrais vérifier que la balise suivante est bien </strong>

ça doit être faisable mais j'y connais rien du tout je le répète :)
ImageImage
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Expressions régulières (de m.....)

Message par Geo Trouvpatou »

Ok, j'ai compris où voulais en venir G-Rom.

Bah en faisant ça alors :

Code : Tout sélectionner

n$ = "<strong>ABCDEFGHIJ</strong>"
exp=CreateRegularExpression(#PB_Any,"<strong>|</strong>")
Debug ReplaceRegularExpression(exp,n$,"")
FreeRegularExpression(exp)
Personnellement je m'étais toujours demandé comment dire : Trouve-moi ce qu'il y a entre <strong> et </strong>, ben apparemment c'est justement le Pipe.
J’essayais avec $1 et \\1 à la place de | et cela ne fonctionnait pas.

J'ai donc appris un nouveau truc.
@Case, tu l'as trouvé où ce code ?

[Edit]Mon code ne fonctionne plus si : <strong>ABCDEFGHIJ</STRONG>
Faut trouver comment signifier de ne pas respecter la casse.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Expressions régulières (de m.....)

Message par G-Rom »

Voici un exemple qui marche :

Code : Tout sélectionner

Procedure.s ExtractFromBalise(text.s, open.s, close.s)
      PosA = FindString(text,open,1) + Len(open)
      PosB = FindString(text,close,2)
      Out$ = Mid(text,PosA,PosB-PosA)
      ProcedureReturn Out$
EndProcedure



REGEX_MASK_H_1_6$     = "<h([1-6])>([^<]*)</h([1-6])>"
REGEX_MASK_STRONG$    = "<strong>([^<]*)</strong>"
REGEX_MASK_PROCEDURE$ = "Procedure([^<]*)\)"




n$ = "<h1>Ceci est une Balise foireuse</hx>"
n$ + "<h1>Ceci est un titre !!!!!</h1>"
n$ + "<strong>DUR COMME MA BYTE!</strong>"
n$ + "<strong>DUR COMME MA BYTE! 2X</strong>"
n$ + "<BaliseFoireuse>DUR COMME MA BYTE!</BaliseFoireuse>"
n$ + "Prcocedure Test(A.f)"
n$ + "Procedurdes Floo(A.f)"
n$ + "Procedure Floo(A.f)"



;-Extraction des titres :
exp = CreateRegularExpression(#PB_Any,REGEX_MASK_H_1_6$)
Dim Titre$(0)
TitreFound = ExtractRegularExpression(exp,n$, Titre$())
FreeRegularExpression(exp)

;-Extraction des strong :
exp = CreateRegularExpression(#PB_Any,REGEX_MASK_STRONG$)
Dim Strong$(0)
StrongFound = ExtractRegularExpression(exp,n$, Strong$())
FreeRegularExpression(exp)   

;-Extraction des procedures :
exp = CreateRegularExpression(#PB_Any,REGEX_MASK_PROCEDURE$)
Dim Proc$(0)
ProcFound = ExtractRegularExpression(exp,n$, Proc$())
FreeRegularExpression(exp)   





Debug "TITRE VALIDE :"
For k = 0 To TitreFound-1
  Debug "- "+ExtractFromBalise(Titre$(k),"<h1>","</h1>")
Next
Debug "STRONG VALIDE :"
For k = 0 To StrongFound-1
  Debug "- "+ExtractFromBalise(Strong$(k),"<strong>","</strong>")
Next
Debug "PROC VALIDE :"
For k = 0 To ProcFound-1
  Debug "- "+Proc$(k)
Next


Dès lors que l'on fait du parsing d'une source , en règle générale , pour se simplifier la vie , on met la source en minuscule ou en majuscule.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Expressions régulières (de m.....)

Message par blendman »

super ces exemples !
Merci :D
Répondre