Posted: Sat May 16, 2009 12:52 am
thanks Case 
thanks Demivec
sorry for my bad english !!

thanks Demivec

sorry for my bad english !!

http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
Text$= "add() muladd()"
text2$= dobro_replace (Text$, "add" , "Leon" )
Code: Select all
Declare.s dobro_replace(chaine$,chaine_cherche$,chaine_remplace$)
Procedure.s dobro_replace(chaine$,chaine_cherche$,chaine_remplace$)
; by Dobro
Static extrait1$,pos
If pos= Len (chaine$)
text2$=extrait1$
pos=0 :extrait1$= ""
ProcedureReturn text2$
EndIf
pos=pos+1
extrait1$=extrait1$+ Mid (chaine$,pos,1)
extrait2$= Mid (chaine$,pos, Len (chaine_cherche$))
extrait3$= Mid (chaine$,pos, Len (chaine_cherche$)+1)
If extrait3$=chaine_cherche$+ "(" Or extrait3$=chaine_cherche$+ " " Or extrait3$=chaine_cherche$+ "," Or extrait3$=chaine_cherche$+ "." Or extrait3$=chaine_cherche$+ Chr (13) Or extrait3$=chaine_cherche$+ ";"
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
text2$=dobro_replace(chaine$,chaine_cherche$,chaine_remplace$)
ProcedureReturn text2$
EndProcedure
Declare.s replace_whole_word(Haystack.s, Needle.s, Seam.s)
Procedure.s replace_whole_word_helper(Haystack.s, Needle.s, Seam.s)
L.s = Left(Haystack, 1)
If L
Select L
Case " ", ".", ",", ";", "(", #CRLF$, ""
ProcedureReturn L + replace_whole_word(Mid(Haystack, 2), Needle, Seam)
Default
ProcedureReturn L + replace_whole_word_helper(Mid(Haystack, 2), Needle, Seam)
EndSelect
EndIf
EndProcedure
Procedure.s replace_whole_word(Haystack.s, Needle.s, Seam.s)
If Haystack And Left(Haystack, Len(Needle)) = Needle
A.s = Mid(Haystack, Len(Needle)+1, 1)
Select A
Case " ", ".", ",", ";", "(", #CRLF$, ""
ProcedureReturn Seam + A + replace_whole_word(Right(Haystack, Len(Haystack)-Len(Needle)-1), Needle, Seam)
EndSelect
EndIf
ProcedureReturn replace_whole_word_helper(Haystack, Needle, Seam)
EndProcedure
Text$= "replace, don'treplace don'treplace() don'treplace ...replace..."
text2$= dobro_replace(Text$, "replace" , "______" )
text3$= replace_whole_word(Text$, "replace" , "______" )
text4$= ReplaceString (Text$, "replace" , "______" )
Text$ + "|" + #CRLF$
Text$ + #CRLF$
text$ + "dobro" + #TAB$ + text2$ + "|" + #CRLF$
text$ + "trond" + #TAB$ + text3$ + "|" + #CRLF$
text$ + "pb" + #TAB$ + text4$ + "|" + #CRLF$
MessageRequester("", text$)
#Tries = 5000
time = ElapsedMilliseconds()
For U = 0 To #Tries
text2$=dobro_replace(Text$, "replace" , "Leon" )
Next
MessageRequester("", Str(ElapsedMilliseconds()-time))
time = ElapsedMilliseconds()
For U = 0 To #Tries
text4$= replace_whole_word(Text$, "replace" , "Leon" )
Next
MessageRequester("", Str(ElapsedMilliseconds()-time))
my code page 1 is fixed !Trond wrote:I think there's a bug in dobro's code:
The result: "Leon() mulLeon()"Code: Select all
Text$= "add() muladd()" text2$= dobro_replace (Text$, "add" , "Leon" )
Correct result: "Leon() muladd()", right?
Sorry but french is not my base languagedobro wrote:Fred , si tu voulais bien lire ce topic attentivement
et nous dire ce que tu en pense ??
http://www.purebasic.fr/french/viewtopi ... 7858#97858
Merci
I've tried the sameDeeem2031 wrote:Imho this should work too, but it doesn't![]()
Code: Select all
Haystack.s = "aa Test_Procedure20(coucou) bb Test_Procedure205 (coucou) cc Test_Procedure20 (coucou) cc Test_Procedure20" + Chr (13)+ Chr (10)+ "(coucou)" Needle.s="Procedure20" Seam.s="toto" Procedure.s Deeem2031_Replace(String.s, Find.s, Replace.s) Protected regex, result.s regex = CreateRegularExpression(#PB_Any, "(?<![a-zA-Z0-9])"+Find+"(?![a-zA-Z0-9])") If regex result = ReplaceRegularExpression(regex, String, Replace) FreeRegularExpression(regex) EndIf ProcedureReturn result EndProcedure Debug Deeem2031_Replace(Haystack.s, Needle.s, Seam.s)
Code: Select all
dobro_test.s="aa Test_Procedure20(coucou) bb Test_Procedure205 (coucou) cc Test_Procedure20 (coucou) cc Test_Procedure20 totoProcedure20" + Chr (13)+ Chr (10)+ "(coucou)"
If CreateRegularExpression(0, "(?<![[:alnum:]])Procedure20(?![[:alnum:]])")
Result$ = ReplaceRegularExpression(0, dobro_test, "xxx")
MessageRequester("Résultat", Result$, #PB_MessageRequester_Ok)
Else
Debug RegularExpressionError()
EndIf