/ / Warum passt "(. *?) $" Zu "abc abc" in abc (abc abc) "? - regex, lazy-evaluation

Warum passt "(. *?) $" In abc (abc abc) "(abc abc)"? - regex, lazy-evaluation

Nach meiner Argumentation sollte es mit einem Leerzeichen> beliebigen Zeichen vor dem Ende der Zeichenfolge übereinstimmen, und ? macht es faul, das heißt abc)? ist das beste Spiel.

Warum mache ich falsch? Sollte es nicht übereinstimmen abc)?

Antworten:

1 für die Antwort № 1

Deine Regex:

 (.*?)$

oder um es lesbarer zu machen:

s(.*?)$

ist nicht wirklich faul, da es nichts gibt nach fauler Quantifizierer .*?. Es ist ziemlich genau wie:

s(.*)$

das ist der Grund, warum es den ersten Raum und alles nach diesem Raum findet.


1 für die Antwort № 2

Es findet den ersten Raum und dann alles andere bis zum Ende der Saite.

Aufgrund der Reihenfolge der Auswertung wird dies zuerst erhalten (Raum) dann dein (.*?) passt alles bis zum Ende der Zeichenfolge an $. Dies läuft von links nach rechts.

Wenn du wirklich etwas nach dem suchen willstletzter Platz, wie von @RevanProdigalKnight gezeigt, müssen Sie sicherstellen, dass es ein Leerzeichen und dann alles, was kein Leerzeichen ist, bis zum Ende der Zeichenfolge übereinstimmt. Ich werde den folgenden Regex vorschlagen:

/sS*$/