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