Angenommen, wir haben diesen HTML-Inhalt und wir sind bereit, Content1, Content2, .. mit regulärem Ausdruck zu erhalten.
%Vor%Wenn ich die Zeile unter
verwende %Vor%Ich werde ein Array mit einer einzelnen Zeile erhalten, die folgendes enthält:
%Vor%Und mit diesem Code:
%Vor%Ich bekomme ein Array mit 4 Zeilen, das Content1, Content2, ... enthält.
Warum (. *) funktioniert nicht, weil es match any character zero or more times
*
passt auf eine gierige -Methode, *?
passt auf eine nicht-gierige -Methode.
Dies bedeutet, dass .*
mit vielen Zeichen übereinstimmt, einschließlich aller intermediate </li><li>
-Paare, wobei nur beim letzten Vorkommen von </li>
gestoppt wird. Andererseits stimmt .*?
mit wenigen Zeichen überein und stoppt beim ersten Auftreten von </li>
.
Weil .*
selbst gierig ist und so viel wie möglich verschlingt (d. h. bis zum letzten </li>
), während das Muster immer noch passt. .*?
andererseits ist nicht gierig und frisst so wenig wie möglich auf (stoppt zuerst </li>
).
Sehen Sie diesen Artikel über die Greedy von regulären Ausdrücken.