Heim  >  Artikel  >  Java  >  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

王林
王林Original
2019-11-19 16:16:567818Durchsuche

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:

(?!匹配模式)

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).*?$

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).*?$

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)(.*?)$

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

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!

Stellungnahme:
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