Heim > Java > JavaBase > Java verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten

Java verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten

王林
Freigeben: 2019-11-19 16:16:56
Original
7930 Leute haben es durchsucht

Java verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten

Testdaten:

Java verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten

Zum Beispiel möchten wir mit den oben genannten einfachen Protokolleinträgen zwei Ziele erreichen:

1. Filtern Sie die Daten auf Nr. 8 heraus;

2. Suchen Sie die Einträge, die die robots.txt-Zeichenfolge nicht enthalten (solange die URL robots.txt enthält, werden alle herausgefiltert ).

Die Syntax für Lookahead lautet:

(?!匹配模式)
Nach dem Login kopieren

Lassen Sie uns zunächst das erste Ziel erreichen – Elemente abgleichen, die nicht mit einer bestimmten Zeichenfolge beginnen.

Hier möchten wir eine fortlaufende Zeichenfolge ausschließen, daher ist das Übereinstimmungsmuster sehr einfach, nämlich 2009-07-08. Die Implementierung ist wie folgt:

^(?!2009-07-08).*?$
Nach dem Login kopieren

Mit Expresso können wir sehen, dass die Ergebnisse tatsächlich die Daten auf Nr. 8 herausfiltern.

Als nächstes wollen wir unser zweites Ziel erreichen – Einträge ausschließen, die eine bestimmte Zeichenfolge enthalten.

Nach der Art und Weise, wie wir es oben geschrieben haben, habe ich es mir angeschaut:

^.*?(?!robots\.txt).*?$
Nach dem Login kopieren

Diese regelmäßige Regel kann im Volksmund beschrieben werden: Beliebiges Zeichen am Anfang, und dann folge nicht dem fortlaufende Zeichenfolge von robots.txt, gefolgt von einer beliebigen Anzahl von Zeichen, dem Ende der Zeichenfolge.

Führen Sie den Test durch und stellen Sie fest, dass:

Java verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten

nicht den gewünschten Effekt erzielt hat. Warum ist das so? Lassen Sie uns den obigen regulären Ausdruck debuggen, indem wir zwei Erfassungsgruppen hinzufügen:

^(.*?)(?!robots\.txt)(.*?)$
Nach dem Login kopieren

Testergebnisse:

Java verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten

Das sehen wir zunächst. Die erste Gruppe stimmte mit nichts überein , aber die zweite Gruppe stimmte mit der gesamten Zeichenfolge überein. Gehen wir noch einmal zurück und analysieren den regulären Ausdruck.

Tatsächlich hat die reguläre Engine, wenn sie Bereich A analysiert, bereits damit begonnen, die Vorausschau für Bereich B durchzuführen. Zu diesem Zeitpunkt wurde festgestellt, dass die Übereinstimmung erfolgreich war, wenn Bereich A Null war – .* war ursprünglich für die Übereinstimmung mit Nullzeichen zugelassen und die Vorausschaubedingung war erfüllt. Die Zeichenfolge „2009“ folgte unmittelbar nach Bereich A, nicht nach Robotern. Daher gleicht der gesamte Matching-Prozess alle Einträge erfolgreich ab.

Java verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten

Nachdem wir den Grund analysiert haben, haben wir den obigen regulären Ausdruck überarbeitet und .*? wie folgt in den Look-Ahead-Ausdruck verschoben:

^(?!.*?robots).*$
Nach dem Login kopieren

Testergebnis :

Java verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten

Empfohlenes Tutorial: Einführung in die Java-Entwicklung

Das obige ist der detaillierte Inhalt vonJava verwendet reguläre Ausdrücke, um Zeichenfolgen abzugleichen, die eine bestimmte Regel nicht enthalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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