Wie lauten diese beiden Begriffe auf verständliche Weise?
Antworten
Zu viele Anzeigen?Gierige werden so viel wie möglich konsumieren. Von http://www.regular-expressions.info/repeat.html sehen wir das Beispiel des Versuchs, die HTML-Tags mit <.+>
. Angenommen, Sie haben Folgendes:
<em>Hello World</em>
Sie denken vielleicht, dass <.+>
( .
bedeutet ein beliebiges Zeichen, das kein Zeilenumbruch ist y +
bedeutet eine oder mehrere ) würde nur mit dem <em>
und die </em>
wenn sie in Wirklichkeit sehr gierig sein wird und vom ersten <
bis zum letzten >
. Dies bedeutet, dass sie mit <em>Hello World</em>
anstatt das, was Sie wollten.
Faulenzen ( <.+?>
) wird dies verhindern. Durch Hinzufügen der ?
nach dem +
sagen wir ihm, er soll wiederholen so wenige Male wie möglich so dass die erste >
ist der Punkt, an dem wir den Abgleich stoppen wollen.
Ich möchte Sie ermutigen, Folgendes herunterzuladen RegExr ein großartiges Tool, das Ihnen hilft, reguläre Ausdrücke zu erforschen - ich verwende es ständig.
Gieriger Quantifizierer
Fauler Quantifizierer
Beschreibung
*
*?
Stern-Quantifizierer: 0 oder mehr
+
+?
Plus Quantifikator: 1 oder mehr
?
??
Optionaler Quantifizierer: 0 oder 1
{n}
{n}?
Quantifizierer: genau n
{n,}
{n,}?
Quantifizierer: n oder mehr
{n,m}
{n,m}?
Quantifizierer: zwischen n und m
Fügen Sie einem Quantifizierer ein ? hinzu, um ihn ungereedet, d. h. faul zu machen.
Beispiel:
Prüfzeichenfolge : Stackoverflow
gieriger Registrierungsausdruck : s.*o
Ausgabe: Stackoverflo w
Ausdruck "träge : s.*?o
Ausgabe: Stacko verflow
Gierig bedeutet, dass Ihr Ausdruck auf eine möglichst große Gruppe passt, faul bedeutet, dass er auf die kleinstmögliche Gruppe passt. Für diese Zeichenfolge:
abcdefghijklmc
und diesen Ausdruck:
a.*c
Ein "gieriger" Treffer entspricht der gesamten Zeichenkette, während ein "fauler" Treffer nur die erste abc
.
Soweit ich weiß, sind die meisten Regex-Engines standardmäßig gierig. Fügen Sie ein Fragezeichen am Ende des Quantifizierers hinzu, um eine faule Übereinstimmung zu ermöglichen.
Wie @Andre S in einem Kommentar erwähnte.
- Gierig: Suchen Sie so lange, bis die Bedingung nicht erfüllt ist.
- Faul: Beendet die Suche, sobald die Bedingung erfüllt ist.
Was gierig und was faul ist, können Sie dem folgenden Beispiel entnehmen.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String args[]){
String money = "100000000999";
String greedyRegex = "100(0*)";
Pattern pattern = Pattern.compile(greedyRegex);
Matcher matcher = pattern.matcher(money);
while(matcher.find()){
System.out.println("I'm greedy and I want " + matcher.group() + " dollars. This is the most I can get.");
}
String lazyRegex = "100(0*?)";
pattern = Pattern.compile(lazyRegex);
matcher = pattern.matcher(money);
while(matcher.find()){
System.out.println("I'm too lazy to get so much money, only " + matcher.group() + " dollars is enough for me");
}
}
}
Das Ergebnis ist: ``` Ich bin gierig und ich will 100000000 Dollar. Das ist das meiste, was ich bekommen kann.
Ich bin zu faul, um so viel Geld zu besorgen, nur 100 Dollar reichen mir.
- See previous answers
- Weitere Antworten anzeigen