(. *) anstelle von (. *?)

8

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

bedeutet     
EBAG 07.04.2010, 11:16
quelle

3 Antworten

19

* 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> .

    
Thomas 07.04.2010, 11:19
quelle
6

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> ).

    
Matteo Riva 07.04.2010 11:20
quelle
3

Sehen Sie diesen Artikel über die Greedy von regulären Ausdrücken.

    
Anders Abel 07.04.2010 11:20
quelle

Tags und Links