Bonjour a tous,

Je cherche a effectué un remplacement dans une chaîne (je converti une formule d'un langage vers un autre langage).
Je veux convertir les symboles <> et /= par !=
Malheureusement, il ne faut pas que je convertisse c'est symbole si il ce trouve au sein d'une chaine.
Voici quelque exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
"sdf" <> sdf    --> "sdf" != sdf
qsd<>"sdf"     --> qsd!="sdf"
"qsd<>sdqf"    --> "qsd<>sdqf"
"<>"              --> "<>"
"/="               --> "/="
"sdf" /= sdf     --> "sdf" != sdf
qsd /= "sdf"     --> qsd != "sdf"
"qsd /= sdqf"   --> "qsd /= sdqf"
Donc pour ce faire, j'utilise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
tr1::basic_regex<TCHAR> diffRegex(_T("\"\\s*(<>|/=)\\s*[^\"]|[^\"]\\s*(<>|/=)\\s*\""),tr1::regex_constants::icase );
formula=tr1::regex_replace(formula,diffRegex,basic_string<TCHAR>(_T(" != ")));
Cette regex fonctionne "presque bien". Les supprime en plus un caractère avant et après les symbole <> et /=
exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"sdf"<>sdf --> "sdf != df
Donc ma question est: Comment corriger cette regex ?


Je vous remercie d'avance pour votre aide

EDIT: j'ai essayé une autre regex qui prend le problème en sens inverse mais celle-ci aussi pose problème:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
tr1::basic_regex<TCHAR> diffRegex(_T("(?!\"[\\d\\w]*\\s*)(<>|/=)(?!\\s*[\\d\\w]*\")"),tr1::regex_constants::icase );
	formula=tr1::regex_replace(formula,diffRegex,basic_string<TCHAR>(_T(" != ")));
Elle fonction bien sauf dans le cas ou le contenu entre cote est a droite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
sdf <> "dsfg" --> ne fonctionne pas
Donc avez vous une idée pour corrigé l'une ou l'autre ?