2009-05-29 16 views
2

Ich habe versucht, eine Regex-Ausdruck zu einem Stück Code zu machen, aber keinen Erfolg. Der Ausdruck funktioniert nicht in vs2008.Wie kann ich diesen Text mit einem Regex übereinstimmen?

Ich habe dieses erstellt:

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

der Quelle anzupassen ist:

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

Oder besser:

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

Kann mir jemand helfen?

Dank, Rodrigo Lobo

Antwort

4

Versuchen Sie, diese Regex aus: /\*<parameters>\*/(?<value>[^/]*)/\*</parameters>\*/

Ein gutes Werkzeug für Herumalbern mit echten C# Regex Muster ist regex-freetool auf code.google.com

0

Ihre regex sollte den gesamten Text von Ihnen angegebenen übereinstimmen, nachdem Sie auf den regulären Ausdruck "Multiline" Option aktivieren.

+0

Regex regex = new Regex (@ "/ \ * \ */( [\ r \ n] * *)/\ * \ * /?.", RegexOptions.Multiline); Übereinstimmung match = regex.Match (scriptText); return match.Success es gibt false zurück. –

+0

"Singleline" ist die Option, die er braucht, nicht Multiline. Und der Teil "[\ r \ n] *" wird nicht benötigt. –

1

Im Folgenden wird der Trick:

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

Alternativ, wenn Sie die äußeren Token aus dem Spiel selbst ausschließen möchten:

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

RegexOptions.Multiline nur die Semantik von ^ und $ ändert - - Du brauchst RegexOptions.Singleline, damit . auch mit den Zeilenenden übereinstimmt (eine Verwirrung, in die ich selbst geraten bin ;-).

-1

Ich möchte Ihnen keine Fische für diese Frage geben, also möchten Sie vielleicht dieses kostenlose Tool (mit Registrierung) von Ultrapico namens Expresso ausprobieren.

Ich bin für einige Zeit mit Regex gestolpert, und Expresso speicherte den Tag bei allen Gelegenheiten.

0

Als Alex sagte, Sie Einlinige Modifikator verwenden können Lassen Sie den Punkt mit Zeilenvorschubzeichen (\ r und \ n) übereinstimmen. Sie können auch das Inline-Formular - (?s) - verwenden, um es innerhalb der Regex selbst anzugeben:

(?s)/*<parameters>*/(?<value>.*?)/*</parameters>*/
Beachten Sie auch den widerwilligen Quantifizierer: " .*?". Das ist für den Fall, dass mehr als eine mögliche Übereinstimmung im Text vorhanden ist. andernfalls würden Sie vom ersten <parameters> Tag zum letzten </parameters> Tag passen.

Verwandte Themen