String du type "/*blablabla*/"

cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 10 déc. 2005 à 19:06
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 10 déc. 2005 à 22:55
Bonjour,

Je souhaiterais modifier un fichier CSS par le biais d'un programme C#. Pour cela je mets des tokens du styles /*blablabla*/ qui permettent de délimiter les parties que je vais modifier. J'utilise ensuite les expressions régulières pour modifier mon document. Pourquoi des tokens du style /*blablabla*/ ? Parce que ce sont des commentaires en CSS et qu'il ne sont pas pris en compte. Malheureusement /**/ est aussi une manière d'encadrer les commentaires dans C# et ça semble poser problème quand j'utilise la class regex. (si je remplace ces tokens par des blablabla simplement ça fonctionne). Une idée pour parer ce problème ?

Merci d'avance

Mathmax

5 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 déc. 2005 à 19:21
Salut,

Celà ne pose habituellement aucun problème d'avoir /**/ dans une chaine litérale.
Je pense que le problème se situe plutôt au niveau de la définition de la Regex en elle même.

/*
coq
MVP Visual C#
*/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
10 déc. 2005 à 21:48
Test ces 2 bouts de code tu comprendras mieux mon problème. Il me semble bien que c'est le /**/ qui pose problème.

string s =
"sd jfkdhs seul ce texte apparait fhsdgkj hjkfd hgjds hjkdsghjkds ghjdskhg sdjghdsjkg hjskdhjk";



string pattern =
string.Format(
"(.*)({0})(.*)",
"seul ce texte apparait");



Regex Myregex =
new
Regex(pattern,
RegexOptions.Singleline);


s = Myregex.Replace(s,
"$2");



Console.Out.WriteLine(s);



string s =
"sd jfkdhs /*ce texte n'apparait tout seul*/ fhsdgkj hjkfd hgjds hjkdsghjkds ghjdskhg sdjghdsjkg hjskdhjk";



string pattern =
string.Format(
"(.*)({0})(.*)",
"/*ce texte n'apparait tout seul*/");



Regex Myregex =
new
Regex(pattern,
RegexOptions.Singleline);


s = Myregex.Replace(s,
"$2");



Console.Out.WriteLine(s);


Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 déc. 2005 à 22:14
C'est bien ce que je disais.
Dans le pattern tu insères une chaîne avec des caractères "spéciaux" au niveau regex...
=>
string pattern = string.Format("(.*)({0})(.*)", @"\x2F\x2Ace texte n'apparait tout seul\x2A\x2F");

/*
coq
MVP Visual C#
*/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
10 déc. 2005 à 22:33
Ok merci ça réponds parfaitement à ma question.
Juste un truc : comment tu sais qu'il faut encoder de cette manière ? et pourquoi le @ ?


Mathmax
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 déc. 2005 à 22:55
La réponse est dans la première partie de ton pattern : tu utilises bien des .* pour spécifier "n'importe quel caractère, répété 0 ou plusieurs fois"
Donc quand tu rajoutais l'autre séquence ce n'était pas le caractère '*', mais bien le même spécificateur de répétition.
D'où l'ajout des caractères en notation hexa.

Le @ sert à neutraliser le caractère d'échappement '\'. => http://msdn.microsoft.com/library/fre/default.asp?url=/library/fre/csref/html/vclrfString.asp

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous