[RESOLU] Regex et ReplaceRegularExpression
j'ai fait une petite procedure recursive 
regarde la :
http://www.purebasic.fr/french/viewtopi ... 7859#97859

regarde la :
http://www.purebasic.fr/french/viewtopi ... 7859#97859
Ben.. ça marche avec les regex :
Biensur c'est specifique à la syntax d'une fonction nom_de_la_fonction[plusieur espaces ou non](
Mais le resultat est là...
Code : Tout sélectionner
Text$ = "(A) : Test_Procedure20(coucou) (B) : Test_Procedure20 (coucou) (C) : Test_Procedure20"+Chr(13)+Chr(10)+"(coucou) (D) : Test_Procedure20 (coucou) (E) : Test_Procedure20 "+Chr(13)+Chr(10)+Chr(13)+Chr(10)+Chr(13)+Chr(10)+"(coucou)"
Text$ + "(A') : Test_Procedure201(coucou) (B') : Test_Procedure202 (coucou) (C) : Test_Procedure20"+Chr(13)+Chr(10)+"(coucou) (D') : Test_Procedure203 (coucou) (E') : Test_Procedure204 "+Chr(13)+Chr(10)+Chr(13)+Chr(10)+Chr(13)+Chr(10)+"(coucou)"
If CreateRegularExpression(0, "_Procedure20 {0,}?["+Chr(13)+Chr(10)+"]{0,}?\(")
Debug Text$
Debug ReplaceRegularExpression(0, Text$, "_xxx(")
EndIf
Mais le resultat est là...
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
En fait c'est conditionné par le caractère après le motif à chercher. Donc un simple ReplaceString ne marchera pas car il risque de remplacer trop d'occurrences.Dobro a écrit :excuse ma naïveté, mais pourquoi ne pas avoir utilisé
Position = FindString(Chaine$, ChaineCherchee$, PositionDepart)
et
String$ = ReplaceString(Chaine$, ChaineCherchee$, ChaineRemplacee$ [, Mode [, PositionDepart]])
???
Voilà un code qui marche:
Code : Tout sélectionner
Procedure.s SpecialReplaceString(Text$, FindMe$, ReplaceBy$)
Protected index.l = 1, *char.c
Protected lFindMe.l = Len(FindMe$), lReplBy.l = Len(ReplaceBy$)
index = FindString(Text$, FindMe$, index)
While index
*char = PeekC(@Text$ + lFindMe + index - 1)
If *char < '0' Or *char > '9'
Text$ = Left(Text$,index-1) + ReplaceBy$ + Right(Text$, 1+Len(Text$)-(index+lFindMe))
Debug Text$
index + lReplBy + 1
Else
index + lFindMe + 1
EndIf
index = FindString(Text$, FindMe$, index)
Wend
ProcedureReturn Text$
EndProcedure
Text$ = "aa Test_Procedure20(coucou) bb Test_Procedure205 (coucou) cc Test_Procedure20 (coucou) cc Test_Procedure20"+Chr(13)+Chr(10)+"(coucou)"
SpecialReplaceString(Text$, "_Procedure20", "_xxx")
/Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Le problème c'est que tu ne peux pas remplacer par "_xxx(" car il n'y a pas forcément cette parenthèse...cederavic a écrit :Ben.. ça marche avec les regex :
...
Biensur c'est specifique à la syntax d'une fonction nom_de_la_fonction[plusieur espaces ou non](
Mais le resultat est là...
Progi1984 a écrit :J'ai quoi derrière : _Procedure20 : tout sauf des chiffres...lionel_om a écrit :Tu as quoi alors ? Un espace ou un retour à la ligne ?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Pas de problème...Dobro a écrit :excuse ma naïveté, mais pourquoi ne pas avoir utilisé
Position = FindString(Chaine$, ChaineCherchee$, PositionDepart)
et
String$ = ReplaceString(Chaine$, ChaineCherchee$, ChaineRemplacee$ [, Mode [, PositionDepart]])
???
FindString => parceque je voulais me faciliter la vie avec les regex

RepaceString => à cause du problème de remplacement de 205 en xx5.
Je vais voir lequel va être le plus rapide entre Dobro & lionel_om.
Mais j'aime bien celui de lionel_om car cela correspond plus à mon problème.
Merci à vous tous...
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
@Dobro: Toujours rapide et valide en réponse !
@cederavic: Ce code est pour parser de l'ASM, donc pas obligé qu'il y ait une parenthèse derrière cet appel.
@cederavic: Ce code est pour parser de l'ASM, donc pas obligé qu'il y ait une parenthèse derrière cet appel.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net