Expression reguliere
Expression reguliere
Bonjour,
J'aurais besoin d'une petite aide. J'ai une expression reguliere pour colorise du texte, mais je voudrais exclure tout ce qui ce trouve entre " ".
Voila l'expression : '/(\b'.$vars_pbcm[$k].'\b)/i' (oui le code est du PHP, mais je penses que les expression sont partout les meme.
Merci d'avance,
GallyHC
J'aurais besoin d'une petite aide. J'ai une expression reguliere pour colorise du texte, mais je voudrais exclure tout ce qui ce trouve entre " ".
Voila l'expression : '/(\b'.$vars_pbcm[$k].'\b)/i' (oui le code est du PHP, mais je penses que les expression sont partout les meme.
Merci d'avance,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Expression reguliere
Bonjour,
Visiblement personne ici a plus de connaissance que moi sur ce truc, bon tant pis, je vais continuer a essaye de comprendre.
Cordialement,
GallyHC
Visiblement personne ici a plus de connaissance que moi sur ce truc, bon tant pis, je vais continuer a essaye de comprendre.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Expression reguliere
Si cela peut t'aider
un outil pour tester des expressions régulières
http://www.purebasic.fr/french/viewtopic.php?f=6&t=9948
un bon site d'explication
http://www.siteduzero.com/tutoriel-3-14 ... e-2-2.html
un outil pour tester des expressions régulières
http://www.purebasic.fr/french/viewtopic.php?f=6&t=9948
un bon site d'explication
http://www.siteduzero.com/tutoriel-3-14 ... e-2-2.html
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: Expression reguliere
LSI> Très bon site, merci 

Code : Tout sélectionner
g.s = Chr(34)
machaine.s = "remplacez " + g + "moa" + g
Debug machaine
If CreateRegularExpression(0, g + ".+" + g)
Result$ = ReplaceRegularExpression(0, machaine, g + g)
Debug Result$
Else
Debug RegularExpressionError()
EndIf
Re: Expression reguliere
* je prend ma pelle est ma pioche *** Et hop, topic déterré
*
Un de mes programmes ayant planté de façon assez chiante, je me suis dis que les expressions régulière peuvent me tirer de mes soucis.
Je parcours les excellents tutoriels cités ci-dessus, et découvre avec émerveillement que les regex font exactement ce que je cherche à faire.
Hop, je prend les outils du Soldat pour créer facilement mes regex, et lorsqu'elles fonctionnent bien, PAF !! Un fat coup dans ma gueule et dans mon moral
Mes tests ne fonctionnent pas de la manière prévue avec ReplaceRegularExpression(), apparement les '$0', '$1', et autres, ne sont pas pris en compte. Ce qui invalide une des meilleures possibilités des expressions régulière -_-
Que dis-je, la meilleure.
)
Ce code devrais donner sur le Debug : "Z + un 'a' minuscule Z + un 'i' minuscule"
Voila, j'en pleurerais presque...

Un de mes programmes ayant planté de façon assez chiante, je me suis dis que les expressions régulière peuvent me tirer de mes soucis.
Je parcours les excellents tutoriels cités ci-dessus, et découvre avec émerveillement que les regex font exactement ce que je cherche à faire.
Hop, je prend les outils du Soldat pour créer facilement mes regex, et lorsqu'elles fonctionnent bien, PAF !! Un fat coup dans ma gueule et dans mon moral

Mes tests ne fonctionnent pas de la manière prévue avec ReplaceRegularExpression(), apparement les '$0', '$1', et autres, ne sont pas pris en compte. Ce qui invalide une des meilleures possibilités des expressions régulière -_-
Que dis-je, la meilleure.
Eh bah NON, c'est pas pour nous, ou alors je m'y prend mal, (je que je voudrais penserLe tutoriel super a écrit :En effet, retenez bien ceci : à chaque fois qu'il y a une parenthèse, cela crée une variable appelée $1 (pour la première parenthèse), $2 pour la seconde etc...
On va se servir ensuite de ces variables pour modifier la chaîne (faire un remplacement).

Code : Tout sélectionner
CreateRegularExpression(0, "[a-z]")
res$ = ReplaceRegularExpression(0, "ZaZi", " + un '$0' minuscule ")
Debug res$
Voila, j'en pleurerais presque...
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Expression reguliere
...............
Dernière modification par Backup le ven. 30/sept./2011 20:09, modifié 1 fois.
Re: Expression reguliere
non non Dobro, ça c'est du bricollage. Je ne comprend pas pourquoi Fred n'ont pas codé la fonction comme elle devrais fonctionner avec PCRE.
C'est d'une puissance !!! J'en frémis.
Alors j'explique le principe pour que ce soit clair :
Dans une regex, CHAQUE parenthèse ouvrante créé une variable nommé $+un nombre de 1 à 99.
$0 représente toute l'expression régulière.
Du coup, on peux utiliser un moteur de remplacement extrêmement puissant !!
C'est d'une puissance !!! J'en frémis.
Alors j'explique le principe pour que ce soit clair :
Dans une regex, CHAQUE parenthèse ouvrante créé une variable nommé $+un nombre de 1 à 99.
$0 représente toute l'expression régulière.
Du coup, on peux utiliser un moteur de remplacement extrêmement puissant !!
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Expression reguliere
Es-ce que vous pensez que c'est un bug ? ou bien le comportement voulu ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Expression reguliere
ben ce Tuto est manifestement fait pour le PHPgraph100 a écrit :.Le tutoriel super a écrit :En effet, retenez bien ceci : à chaque fois qu'il y a une parenthèse, cela crée une variable appelée $1 (pour la première parenthèse), $2 pour la seconde etc...
On va se servir ensuite de ces variables pour modifier la chaîne (faire un remplacement).
le Php permet des grands eccarts avec les variables
comme ici justement
$0 est une variable PHP ..
le php permet surement de récuperer ce qui se trouve entre parenthese
mais ne je croix pas que ce soit une option des Regex
mais plutot du PHP

Re: Expression reguliere
Ah ha !
Bon, un autre lien utile, le type parle des assertions. Et il introduit aussi la possibilité de modifier les options à la volée.
ET DONC : d'utiliser des options que PB ne prend pas en compte pour le moment :
- insensibilité à la casse ( i )
- ungreedy ( U )
- etc ..
http://www.lumadis.be/regex/tuto_pcre.php
pour les options à la volée : "(?U)" pour activer et (?-U) pour déactiver (ou U est l'option : UnGreedy)
Enfin, effectivement ces tutos concernent une implémentation php. Cependant, ne trouvez vous pas qu'il serais utile de pourvoir utiliser les parenthèses capturantes ?
Bon, un autre lien utile, le type parle des assertions. Et il introduit aussi la possibilité de modifier les options à la volée.
ET DONC : d'utiliser des options que PB ne prend pas en compte pour le moment :
- insensibilité à la casse ( i )
- ungreedy ( U )
- etc ..
http://www.lumadis.be/regex/tuto_pcre.php
pour les options à la volée : "(?U)" pour activer et (?-U) pour déactiver (ou U est l'option : UnGreedy)
Enfin, effectivement ces tutos concernent une implémentation php. Cependant, ne trouvez vous pas qu'il serais utile de pourvoir utiliser les parenthèses capturantes ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Expression reguliere
Il faudrait l'avis de Fred la-dessus. Dois-je aller poster ça sur le english fofo ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Expression reguliere
Oui, ça ne fonctionne pas, peut-être qu'il y a une astuce. Tu as regardé sur le forum anglais?
Re: Expression reguliere
J'ai trouvé ça : http://www.purebasic.fr/english/viewtop ... ead#unread
Et j'avais oublié qu'on en avait déjà parlé : http://www.purebasic.fr/english/viewtop ... 1&start=15
Et j'avais oublié qu'on en avait déjà parlé : http://www.purebasic.fr/english/viewtop ... 1&start=15
Re: Expression reguliere
tu sais que je t'aime toi 
j'avais commencé un wrapper à partir d'une DLL ...
Voila un code qui devrais avoir le même comportement. Je vais essayer de terminer mon programme avec. (J'ai juste modifier le code trouver sur le 1er post que tu pointe)
[EDIT] : code mis à jour
Néanmoins, en natif se serais quand même mieux.

j'avais commencé un wrapper à partir d'une DLL ...
Voila un code qui devrais avoir le même comportement. Je vais essayer de terminer mon programme avec. (J'ai juste modifier le code trouver sur le 1er post que tu pointe)
[EDIT] : code mis à jour
Code : Tout sélectionner
ImportC ""
pcre_exec(*pcre,*extra,subject.s,length,startoffset,options,*ovector,ovecsize)
EndImport
Procedure.s BackrefReplaceRegularExpression(regexp_handle, string.s, replacement.s, maximum_reference.l = 10) ; 0 <= maximum_reference <= 99
Static Dim pcre_results(202)
depart = 0
While pcre_exec(PeekL(regexp_handle), 0, string, Len(string), depart, 0, @pcre_results(), 202) > 0
; pcre_exec(PeekL(regexp_handle), 0, string, Len(string), pcre_results(1), 0, @pcre_results(), 202)
rpl.s = replacement
p = pcre_results(0)
q = pcre_results(1)
If FindString(replacement,"$0", 1)
rpl = ReplaceString(rpl, "$0", PeekS(@string + p, q - p))
EndIf
tableau_ref = 2
For _a = 1 To maximum_reference
tag$ = "$" + Str(_a)
If FindString(replacement, tag$, 1)
p1 = pcre_results(tableau_ref)
q1 = pcre_results(tableau_ref + 1)
rpl = ReplaceString(rpl, tag$, PeekS(@string + p1, q1 - p1))
EndIf
tableau_ref + 2
Next
; If FindString(replacement,"\2",1)
; p1=pcre_results(4)
; q1=pcre_results(5)
; rpl=ReplaceString(rpl,"\2",PeekS(@string+p1,q1-p1))
; EndIf
; If FindString(replacement,"\3",1)
; p1=pcre_results(6)
; q1=pcre_results(7)
; rpl=ReplaceString(rpl,"\3",PeekS(@string+p1,q1-p1))
; EndIf
depart = p + Len(rpl)
string = Left(string, p) + rpl + Right(string, Len(string) - q)
Wend
ProcedureReturn string
EndProcedure
rh = CreateRegularExpression(0," t(.*?)e(.*?) ")
Debug BackrefReplaceRegularExpression(rh,"As they functions tried importing them through the tset ","________$0")
Dernière modification par graph100 le sam. 18/juin/2011 19:10, modifié 1 fois.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Expression reguliere
Nickel 
+1 pour le natif

+1 pour le natif