2009-05-29 10 views
2

J'ai essayé de faire une expression regex pour correspondre à un morceau de code, mais pas de succès. L'expression ne fonctionne pas dans vs2008.Comment puis-je faire correspondre ce texte avec une regex?

J'ai créé celui-ci:

/\*<parameters>\*/(?<value>[\r\n]*.*)/\*</parameters>\*/ 

la source est:

/*<parameters>*/ 
@parameter blue 
,@parameter2 red 
,@parameter3 green 
,@parameter4 yellow /*</parameters>*/ 

Ou mieux:

/*<parameters>*/ \r\n @parameter blue \r\n ,@parameter2 red \r\n ,@parameter3 green \r\n ,@parameter4 yellow /*</parameters>*/ 

Quelqu'un peut-il me aider?

grâce, Rodrigo Lobo

Répondre

4

Essayez cette Regex sur: /\*<parameters>\*/(?<value>[^/]*)/\*</parameters>\*/

Un bon outil pour faire l'imbécile avec des motifs réels C# regex est-regex freetool sur code.google.com

0

Votre regex doit correspondre à la totalité du texte que vous avez spécifié, une fois que vous activez l'option regex "multiligne".

+0

Regex regex = new Regex (@ "/ \ * \ */( [\ r \ n] *)/\ * \ * /?"., RegexOptions.Multiline); Match match = regex.Match (scriptText); retour match.Success il renvoie false .. –

+0

"Singleline" est l'option dont il a besoin, pas Multiline. Et la partie "[\ r \ n] *" n'est pas nécessaire. –

1

Ce qui suit fera l'affaire:

/\*<parameters>\*/(.|\r|\n)*/\*</parameters>\*/ 

Alternativement, si vous voulez exclure les jetons extérieurs du match lui-même:

(?<=/\*<parameters>\*/)(.|\r|\n)*(?=/\*</parameters>\*/) 
2

RegexOptions.Multiline ne change la sémantique de ^ et $ - - vous avez besoin de RegexOptions.Singleline pour laisser . correspondre aux fins de ligne ainsi (une confusion que j'ai été attrapé en moi-même ;-).

-1

Je ne veux pas vous donner de poisson pour cette question, alors vous pouvez essayer cet outil gratuit (avec enregistrement) d'Ultrapico appelé Expresso.

Je suis tombé sur Regex pendant plusieurs années, et Expresso a sauvé la journée en toute occasion.

0

Comme Alex a dit, vous pouvez utiliser le modificateur Singleline à laissez le point correspondre aux caractères de nouvelle ligne (\ r et \ n). Vous pouvez également utiliser le formulaire en ligne - (?s) - pour le spécifier dans la regex lui-même:

(?s)/*<parameters>*/(?<value>.*?)/*</parameters>*/
Notez également le quantificateur réticent: " .*?". C'est dans le cas où il y a plus d'une correspondance potentielle dans le texte; Dans le cas contraire, la première balise <parameters> correspond à la dernière balise </parameters>.

Questions connexes