2010-10-28 5 views
6

Lassen Sie uns sagen, ich habe eine mehrzeilige Zeichenfolge wie folgt:Wie eine "minimale Übereinstimmung" Regex-Suche in C#?

STARTFRUIT 
banana 
ENDFRUIT 

STARTFRUIT 
avocado 
ENDFRUIT 

STARTVEGGIE 
rhubarb 
ENDVEGGIE 

STARTFRUIT 
lime 
ENDFRUIT 

Ich möchte für alle Früchte, ohne Gemüse suchen. Ich versuche dies:

MatchCollection myMatches = Regex.Matches(tbBlob.Text, "STARTFRUIT.*ENDFRUIT", RegexOptions.Singleline); 

foreach (var myMatch in myMatches) 
{ 
    Forms.MessageBox.Show(String.Format("Match: {0}", myMatch), "Match", Forms.MessageBoxButtons.OK, Forms.MessageBoxIcon.Information); 
} 

Das Problem ist, statt mir eine Reihe von drei Spielen der Rücksendung, es mir ein großes Spiel gibt den ersten STARTFRUIT und den Anfang und das letzte ENDFRUIT am Ende umfasst. Gibt es eine Möglichkeit, die Matchsuche zu "minimieren"? Ich sehe keine Hilfe in RegexOptions.

Antwort

21

Verwenden Sie ein non-greedy modifier (ein Fragezeichen) nach dem quantifier:

 
"STARTFRUIT.*?ENDFRUIT" 
      ^
     add this 

Beachten Sie, dass die Fragezeichen hier eine andere Bedeutung haben hier als wenn es als quantifier verwendet wird, wo es heißt „Null entsprechen oder eins ".

Verwandte Themen