Ich fand dies Lehrgang über reguläre Ausdrücke, und obwohl ich intuitiv verstehe, was die Qualifikatoren "gierig", "zurückhaltend" und "besitzergreifend" bewirken, scheint es eine ernsthafte Lücke in meinem Verständnis zu geben.
Konkret im folgenden Beispiel:
Enter your regex: .*foo // Greedy qualifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.
Enter your regex: .*?foo // Reluctant qualifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.
Enter your regex: .*+foo // Possessive qualifier
Enter input string to search: xfooxxxxxxfoo
No match found.
In der Erklärung heißt es Essen die gesamte eingegebene Zeichenkette, Buchstaben wurden verbraucht , Matcher zurückdrehend wurde das äußerste rechte Vorkommen von "foo" Erbrochenes , usw.
Leider verstehe ich trotz der schönen Metaphern immer noch nicht, was von wem gegessen wird... Kennen Sie eine andere Anleitung, die (kurz und bündig) erklärt wie Reguläre Ausdrücke funktionieren?
Wenn jemand den folgenden Absatz in einer etwas anderen Formulierung erklären kann, wäre das sehr hilfreich:
Das erste Beispiel verwendet den gierigen Quantifizierer
.*
um "irgendetwas" zu finden, null oder mehr Mal, gefolgt von den Buchstaben"f"
,"o"
,"o"
. Da der Quantifizierer gierig ist, ist die.*
Teil des Ausdrucks frisst zunächst die gesamte Eingabezeichenfolge. An diesem Punkt kann der Gesamtausdruck nicht erfolgreich sein, weil die letzten drei Buchstaben ("f"
,"o"
,"o"
) sind bereits verbraucht worden [von wem?]. Also zieht sich der Matcher langsam [von rechts nach links?] einen Buchstaben nach dem anderen zurück, bis das äußerste rechte Vorkommen von"foo"
erbrochen wurde [was bedeutet das?], woraufhin die Suche erfolgreich ist und die Suche endet.Das zweite Beispiel ist jedoch widerwillig und beginnt damit, dass zunächst [von wem?] "nichts" konsumiert wird. Denn
"foo"
nicht am Anfang der Zeichenkette steht, ist es gezwungen, den ersten Buchstaben zu verschlucken [wer verschluckt?"x"
), was die erste Übereinstimmung bei 0 und 4 auslöst. Unser Test-Kabelbaum setzt den Prozess fort, bis die Eingabezeichenkette erschöpft ist. Es findet eine weitere Übereinstimmung bei 4 und 13.Im dritten Beispiel wird keine Übereinstimmung gefunden, weil der Quantor ein Possessivum ist. In diesem Fall wird die gesamte Eingabezeichenkette von
.*+
[wie?], so dass nichts übrig bleibt, um das "foo" am Ende des Ausdrucks zu erfüllen. Verwenden Sie einen Possessiv-Quantifizierer für Situationen, in denen Sie alles von etwas erfassen wollen, ohne jemals einen Rückzieher zu machen [was bedeutet Rückzieher?]; er wird den entsprechenden Gier-Quantifizierer in Fällen, in denen die Übereinstimmung nicht sofort gefunden wird, übertreffen.