2009-12-17 16 views

Antwort

116

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.

+1

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

47

Der nicht-gierige Operator, ?. Wie so:

.*? 
17

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 
+1

Oder suchen Sie in umgekehrter Reihenfolge, beginnend am Ende, wenn Übereinstimmungen verschachtelt sind: "(ab (abk) bk)". – LBogaardt

+5

@LBogaardt Wie würde man in umgekehrter Reihenfolge suchen? bekomme es nicht – azerafati

+1

@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

Verwandte Themen