Wie sage ich RegEx (.NET-Version), um die kleinste gültige Übereinstimmung anstelle der größten zu erhalten?RegEx: Kleinste mögliche Übereinstimmung oder nongreedy Übereinstimmung
Antwort
Für einen regulären Ausdruck wie .*
oder .+
, hängen Sie ein Fragezeichen (.*?
oder .+?
) so wenig Zeichen wie möglich zu entsprechen. Um einen Abschnitt (?:blah)?
optional anzupassen, aber ohne Übereinstimmung, sofern dies absolut notwendig ist, verwenden Sie etwas wie (?:blah){0,1}?
. Für eine wiederholende Übereinstimmung (entweder unter Verwendung der Syntax {n,}
oder {n,m}
) hängen Sie ein Fragezeichen an, um so wenig wie möglich zu finden (z. B. {3,}?
oder {5,7}?
). Die Dokumentation zu regular expression quantifiers kann auch hilfreich sein.
Der nicht-gierige Operator, ?
. Wie so:
.*?
Der nicht gierig Betreiber bedeutet nicht die kürzeste mögliche Übereinstimmung:
abcabk
a.+?k
wird die gesamte Zeichenfolge übereinstimmen (in diesem Beispiel) statt nur die letzten drei Zeichen.
Ich möchte stattdessen tatsächlich die kleinstmögliche Übereinstimmung finden.
Das ist die letzte mögliche Übereinstimmung für 'a
', um weiterhin alle Übereinstimmungen für k
zuzulassen.
ich den einzigen Weg erraten, das zu tun, ist die Verwendung eines Ausdrucks machen wie:
a[^a]+?k
Oder suchen Sie in umgekehrter Reihenfolge, beginnend am Ende, wenn Übereinstimmungen verschachtelt sind: "(ab (abk) bk)". – LBogaardt
@LBogaardt Wie würde man in umgekehrter Reihenfolge suchen? bekomme es nicht – azerafati
@LBogaardt Noch offene Frage: Wie würde man in umgekehrter Reihenfolge suchen? Sagen wir, ich möchte 'Taxi' bekommen. Wenn meine Eingabe "caaacab" ist und ich nach "a. *? B" suche, wird die gesamte Zeichenfolge anstelle der kurzen Übereinstimmung zurückgegeben. Wie würde ich rückwärts von "b" suchen? – C4u
- 1. Seltsame Regex-Übereinstimmung node.js
- 2. Übereinstimmung .jpg Regex
- 3. Python Regex - bedingte Übereinstimmung?
- 4. Regex Übereinstimmung Ausrufezeichen Java
- 5. Bessere Regex-Übereinstimmung?
- 6. Regex Lookahead eine Übereinstimmung verwerfen
- 7. Exakte Übereinstimmung in regex Charakterklassen
- 8. Wie "inverse Übereinstimmung" mit Regex?
- 9. Java regex Übereinstimmung Nummer Muster
- 10. Regex-Übereinstimmung für XML-Abfragepfade?
- 11. MongoDB-Aggregationsframework-Übereinstimmung ODER
- 12. Ignorieren Leerraum für eine Regex-Übereinstimmung
- 13. Übereinstimmung, bis Regex-Ausdruck nicht richtig funktioniert
- 14. Übereinstimmung C# Unicode-ID mit Regex
- 15. Regex Übereinstimmung, die bestimmte Muster ausschließen
- 16. Regex-Übereinstimmung '?' nicht durch einfache oder doppelte Anführungszeichen eingewickelt
- 17. C# Regex: Wie macht man eine ODER-Übereinstimmung?
- 18. Übereinstimmung von 2 Regex nach bestimmten Kriterien?
- 19. Regex keine Übereinstimmung separaten Wert und Text
- 20. Case Sensitive teilweise Übereinstimmung mit Boost-regex
- 21. exakte Regex-Übereinstimmung für mehrere Gleichheitszeichen
- 22. Java RegEx gefunden keine Übereinstimmung Fehler
- 23. Python: Text einer Regex-Übereinstimmung erhalten
- 24. Python beautifulsoup Übereinstimmung Regex nach Zeichenfolge
- 25. Java Regex enthält neue Zeile in Übereinstimmung
- 26. Return erste Übereinstimmung von Ruby Regex
- 27. Perl regex mehrzeilige Übereinstimmung ohne Punkt
- 28. Finden der kürzesten Regex-Übereinstimmung in Python
- 29. Übereinstimmung, aber nicht in Ergebnis mit Regex
- 30. Capture der ersten Übereinstimmung mit Regex (C#)
Ich weiß nicht, ob ich der einzige mit diesem Missverständnis bin, aber es ist wichtig zu beachten: Es stimmt zwar, dass der nicht-gierige Operator so wenige Zeichen wie möglich abgleicht, aber es ist immer noch nicht die Übereinstimmung, nach der man sucht. "So wenig Zeichen wie möglich" entspricht nicht der "kürzest möglichen Übereinstimmung" in Bezug auf RegEx-Standards. Siehe die Antwort unter meinem Kommentar: Mit 'abcabk' und' a. +? K' passt RegEx die gesamte Zeichenfolge an. – Jayjayyy