Heim > 类库下载 > java类库 > Hauptteil

Der Unterschied zwischen Greedy Reluctant Possessive in regulären Java-Ausdrücken

高洛峰
Freigeben: 2016-10-15 13:36:43
Original
2085 Leute haben es durchsucht

Aus der offiziellen Java-Dokumentation http://docs.Oracle.com/javase/7/docs/api/java/util/regex/Pattern.html können wir sehen, dass reguläre Ausdrücke Quantoren darstellen. Es gibt drei Sätze von Symbole, nämlich gierig, zurückhaltend und besitzergreifend. Die Bedeutung ist wie folgt:

Der Unterschied zwischen Greedy Reluctant Possessive in regulären Java-Ausdrücken

Der Unterschied zwischen Gierig, Zurückhaltend und Possessiv

Beispiele

Siehe die Tabelle oben , stellen wir fest, dass die Bedeutung der drei Quantoren gleich ist (zum Beispiel bedeuten X?, X?? und X? alle einmal oder nicht einmal), es gibt jedoch immer noch einige subtile Unterschiede zwischen ihnen. Schauen wir uns zunächst ein Beispiel an:

1.Gierig

public static void testGreedy() {  
    Pattern p = Pattern.compile(".*foo");  
    String strText = "xfooxxxxxxfoo";  
    Matcher m = p.matcher(strText);  
    while (m.find()) {  
        System.out.println("matched form " + m.start() + " to " + m.end());  
    }  
}
Nach dem Login kopieren

Ergebnis:

Übereinstimmung von 0 bis 13

2.Zögerlich

public static void testReluctant() {  
    Pattern p = Pattern.compile(".*?foo");  
    String strText = "xfooxxxxxxfoo";  
    Matcher m = p.matcher(strText);  
    while (m.find()) {  
        System.out.println("matched form " + m.start() + " to " + m.end());  
    }  
}
Nach dem Login kopieren

Ergebnis:

Übereinstimmung mit Form 0 bis 4

Übereinstimmung mit Form 4 bis 13

3.Possessiv

public static void testPossessive() {  
    Pattern p = Pattern.compile(".*+foo");  
    String strText = "xfooxxxxxxfoo";  
    Matcher m = p.matcher(strText);  
    while (m.find()) {  
        System.out.println("matched form " + m.start() + " to " + m.end());  
    }  
}
Nach dem Login kopieren

Ergebnis:

//Erfolgreich nicht abgeglichen

Grundsatzerklärung

Der Greedy-Quantifizierer wird „gierig“ genannt, da der Matcher beim ersten Versuch gezwungen ist, die gesamte Übereinstimmung zu lesen Eingabezeichenfolge, Wenn der erste Übereinstimmungsversuch fehlschlägt, gehen Sie Zeichen für Zeichen von hinten nach vorne zurück und versuchen Sie es erneut, bis die Übereinstimmung erfolgreich ist oder keine Zeichen mehr vorhanden sind, zu denen Sie zurückkehren können.

Musterzeichenfolge: .*foo

Suchzeichenfolge: xfooxxxxxxfoo

Ergebnis: Übereinstimmung von 0 bis 13

Der Vergleichsprozess ist wie folgt

Der Unterschied zwischen Greedy Reluctant Possessive in regulären Java-Ausdrücken

Reluctant verwendet die entgegengesetzte Methode zu Greedy. Es beginnt an der ersten (Zeichen-)Position der Eingabezeichenfolge und liest nur widerstrebend ein Zeichen in einer passenden Suche, bis es versucht, das Ganze zu vervollständigen Zeichenfolge.

Musterzeichenfolge: .*foo

Suchzeichenfolge: xfooxxxxxxfoo

Ergebnis: übereinstimmende Form 0 bis 4

übereinstimmende Form 4 bis 13

Der Vergleichsprozess läuft wie folgt ab:

Der Unterschied zwischen Greedy Reluctant Possessive in regulären Java-Ausdrücken

Possessive Quantifier liest immer die gesamte Eingabezeichenfolge und versucht einmal (und nur einmal), eine erfolgreiche Übereinstimmung herzustellen, Rollback erfolgt bei Possessive nie . Auch wenn dies der Fall ist, kann das Spiel insgesamt erfolgreich sein.

Musterzeichenfolge: .*foo

Suchzeichenfolge: xfooxxxxxxfoo

Ergebnis:

//Nicht übereinstimmend erfolgreich

Der Vergleichsprozess As folgt

Der Unterschied zwischen Greedy Reluctant Possessive in regulären Java-Ausdrücken

Referenzartikel: http://docs.oracle.com/javase/tutorial/essential/regex/quant.html

Lassen Sie uns einen Blick darauf werfen noch ein paar Beispiele:

Musterzeichenfolge:

Musterzeichenfolge: . ?[0-9]

Suchzeichenfolge: abcd5aabb6

Ergebnis: passende Form 0 bis 4

Musterzeichenfolge:.{1,9} [0-9]

Suchzeichenfolge: abcd5aabb6

Ergebnis: Übereinstimmung von 0 bis 10

Musterzeichenfolge: .{1,10} [0-9]

Suchzeichenfolge: abcd5aabb6

Ergebnis: Übereinstimmung fehlgeschlagen


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage