Wie kann ich RegEx (.NET-Version) anweisen, die kleinste gültige Übereinstimmung anstelle der größten zu erhalten?
.net
regex
regex-greedy
non-greedy
Jonathan Allen
quelle
quelle
abcabk
unda.+?k
stimmt RegEx mit der gesamten Zeichenfolge überein.Der nicht gierige Operator ,
?
. Wie so:quelle
Der nicht gierige Operator bedeutet nicht die kürzestmögliche Übereinstimmung:
a.+?k
stimmt mit der gesamten Zeichenfolge (in diesem Beispiel) überein, anstatt nur mit den letzten drei Zeichen.Ich möchte stattdessen tatsächlich die kleinstmögliche Übereinstimmung finden.
Dies ist die letzte mögliche Übereinstimmung für '
a
', um noch alle Übereinstimmungen für zuzulassenk
.Ich denke, der einzige Weg, dies zu tun, besteht darin, einen Ausdruck wie den folgenden zu verwenden:
Code-Snippet anzeigen
quelle
cab
. Wenn meine Eingabe istcaaacab
und ich danach suchea.*?b
, wird die vollständige Zeichenfolge anstelle der kurzen Übereinstimmung darin zurückgegeben. Wie würde ich von der rückwärts suchenb
?START[^START]*?END
(wobei START und END Ihre regulären Regexe für Start- und Endzeichen sind). Es bedeutet im Wesentlichen "alles von START bis END