2010-04-26 7 views
30

Ich konnte dazu nichts online finden. Es gibt RegexOptions, aber es hat nicht Global als eine seiner Optionen. In der Inline-Modifikatorliste wird auch die globale Zuordnung nicht erwähnt.Unterstützt .NET Regex den globalen Abgleich?

Auf den Punkt gebracht, ich habe einen regulären Ausdruck bekam mit dieser Regex so etwas wie

--arga= "arg1" --argb ="arg2" 

in getrennte Argument Name/Wert-Paare zu analysieren:

--(\\w+)\\s*=\\s*\"(\\w+)\"\\s* 

aber die .NET Regex-Klasse doesn Mach es nicht global (iterativ). Damit dies funktioniert, müsste ich eine Übereinstimmung erstellen, diese aus der Argument-Zeichenfolge entfernen und immer wieder wiederholen, bis alle Argumente erschöpft sind.

Es wäre schöner, die Regex einmal auszuführen und dann die Match-Gruppen zu durchlaufen, um die Name-Value-Paare zu erhalten. Ist das möglich? Was vermisse ich?

Antwort

41

Sie suchen nach der Regex.Matches method (plural), die eine Auflistung zurückgibt, die alle Übereinstimmungen in der ursprünglichen Zeichenfolge enthält.

+0

ugh ... danke! Das habe ich komplett vermisst. Ich werde es jetzt versuchen. – Dave

+0

können Sie den saubersten Weg empfehlen, die Name Value-Paare zu erhalten? Wenn ich Matches benutze, gibt es zwei Gruppen zurück: '--arga =" arg1 "' und '--argb =" arg2 "', aber ich habe auf diese gehofft, ** plus ** 'arga',' arg1', 'argb' und' arg2'. – Dave

+3

Überprüfen Sie die Eigenschaft 'Groups [1]' jedes 'Match'-Objekts. – SLaks

Verwandte Themen