Il y a quelques jours je m'étais remis sur ce problème et voici quelque chose qui m'a l'air fonctionnel, à défaut d'avoir un code comme dans mon post précédent qui lui, se rapproche plus d'un preg_replace.
Mais bon mon code remplace aussi bien les [ color=#000000 ] que les [ color=Green ].
C'est peut-être améliorable, ou il y a peut-être un dysfonctionnement que je n'ai pas vu, mais pour mon parsage de bbcode ça devrait le faire.
Code : Tout sélectionner
EnableExplicit
Define MaChaine$, nbExpressionTrouvee.i, k.i
If CreateRegularExpression(0, "\[color=[a-zA-Z0-9\-\#]+\]")
Dim resultat$(0)
Debug "Extraire le BBCode [color=#000000]xxx[/color] :"
MaChaine$ = "un peu de texte [color=#000000]pour [color=#111111]tester[/color] et du [b]texte[b] collé[color=Green]en mettant Green[/color] [color=#FFFFFF]encore du bla bla[/color]"
Debug MaChaine$
nbExpressionTrouvee = ExtractRegularExpression(0, MaChaine$, resultat$())
For k = 0 To nbExpressionTrouvee - 1
; On isole le texte aléatoire.
; De [color=#000000] on veut #000000
; Ou de [color=green] on veut green
resultat$(k) = resultat$(k)
resultat$(k) = RemoveString(resultat$(k), "[color=")
resultat$(k) = RemoveString(resultat$(k), "]")
;Debug "Etape 1 : "+ resultat$(k)
; On remplace le texte
; On fait un ReplaceString uniquement sur [color= en sachant qu'il n'y aura pas de conflit avec un autre
; BBCode, et on préfère remplacer le texte aléatoire au niveau du crochet fermant.
MaChaine$ = ReplaceString(MaChaine$, "[color=", "<font color="+ Chr(34) +"")
;Debug "Etape 2 : "+ MaChaine$
; Ici il vaut mieux faire un ReplaceString sur le texte aléatoire + le crochet fermant,
; parce que si on avait dit de remplacer uniquement le "]" cela poserait problème
; pour les crochets fermants des autres BBCodes comme [b] [i] etc...
MaChaine$ = ReplaceString(MaChaine$, resultat$(k) +"]", resultat$(k) + Chr(34) +">")
;Debug "Etape 3 : "+ MaChaine$
Next
Debug Str(nbExpressionTrouvee)+" BBCode(s) ont été trouvées."
; On parse [/color] et on le remplace par </font> puisqu'il n'y pas de risque de conflit avec un autre BBCode
MaChaine$ = ReplaceString(MaChaine$, "[/color]", "</font>")
Debug MaChaine$
Else
Debug RegularExpressionError()
EndIf