Regex benimmt sich faul, sollte gierig sein
Ich dachte, dass standardmäßig meineRegex würde das gierige Verhalten zeigen, das ich will, aber es ist nicht im folgenden Code:
Regex keywords = new Regex(@"in|int|into|internal|interface");
var targets = keywords.ToString().Split('|');
foreach (string t in targets)
{
Match match = keywords.Match(t);
Console.WriteLine("Matched {0,-9} with {1}", t, match.Value);
}
Ausgabe:
Matched in with in
Matched int with in
Matched into with in
Matched internal with in
Matched interface with in
Jetzt wird mir klar, dass ich es für dieses kleine Beispiel zum Laufen bringen könnte, wenn ich die Schlüsselwörter einfach nach absteigender Länge sortiere, aber
Ich möchte verstehen, warum dies nicht wie erwartet funktioniert, undDas eigentliche Projekt, an dem ich arbeite, enthält viel mehr Wörter im Regex, und es ist wichtig, sie in alphabetischer Reihenfolge zu halten.Meine Frage lautet also: Warum ist das faul und wie behebe ich das?