Das bedeutet
. # passt auf jedes Zeichen außer Zeilenumbrüche
* # null oder mehrmals
? # passt so wenig Zeichen wie möglich
Also in
text weiterer Text noch mehr Text
wird der reguläre Ausdruck (.*)
den gesamten String auf einmal erfassen, einfangen
text weiterer Text noch mehr Text
in der Rückreferenz Nummer 1.
Wenn du das stattdessen mit (.*?)
matchst, wirst du zwei Treffer bekommen:
text
noch mehr Text
wobei nur text
und noch mehr Text
jeweils in der Rückreferenz Nummer 1 erfasst werden.
Und wenn (danke Kobi!) dein Quelltext ist
text verschachtelter Text zurück zur ersten Ebene
dann wirst du feststellen, dass (.*)
wieder den gesamten String matcht, aber (.*?)
wird matchen
text verschachtelter Text
weil der Regex-Engine von links nach rechts arbeitet. Das ist einer der Gründe, warum reguläre Ausdrücke "nicht das beste Werkzeug" zum Matchen von kontextfreien Grammatiken sind.
0 Stimmen
@Kobi - Ich glaube nicht, dass dies dieselbe Frage ist. Der OP fragt, warum
.*?
nicht immer die minimale Anzahl von Zeichen übereinstimmt, nicht was der Zweck des?
ist.0 Stimmen
@Ted - gut genug, aber ich denke, wenn du verstehst wie
.*?
funktioniert du kannst diese Frage leicht beantworten. In diesem Fall könnte es eine Verallgemeinerung davon sein, vom selben Benutzer: stackoverflow.com/questions/54015710 Stimmen
Das hätte nicht die Antwort hervorgerufen, die ich für diese Frage suche. Deshalb habe ich einen neuen Thread gestartet, der aber verwandt ist.