[Java] Schneiden Sie einen Teil der Zeichenfolge mit Matcher und regulären Ausdrücken aus

Dinge die zu tun sind

Die URL-Zeichenfolge von Hatena Blog hat ein Format wie "Eintrag / Jahr / Monat / Tag / Stunde" (die Beispiel-URL ist ungültig).

https://hogefugapiyo.hatenablog.com/entry/2019/09/02/000000

Dieses Mal werden wir beispielsweise das Jahr, den Monat und den Tag aus dieser URL herausschneiden.

Weise

Verwenden Sie java.util.regex.Matcher.

Matcher matcher = Pattern
    .compile(".+/entry/(\\d+)/(\\d+)/(\\d+)/.+")
    .matcher(/*Zu vergleichende URL-Zeichenfolge*/);

int year = Integer.parseInt(matcher.replaceFirst("$1"));
int month = Integer.parseInt(matcher.replaceFirst("$2"));
int day = Integer.parseInt(matcher.replaceFirst("$3"));

Kommentar

Obwohl es im Titel als Ausschnitt ausgedrückt wurde, soll dieser Prozess ursprünglich "wenn die Eingabe mit dem regulären Ausdruck übereinstimmt, ersetzen Sie den übereinstimmenden Teil durch den angegebenen regulären Ausdruck". In diesem Fall stimmt die gesamte Zeichenfolge der Vergleichsziel-URL mit dem regulären Ausdruck überein, sodass die gesamte Zeichenfolge durch den angegebenen Inhalt ersetzt wird und daher so aussieht, als wäre sie ausgeschnitten worden.

Was ist "$ 1"? Dies ist der Inhalt, der im regulären Ausdruck in "()" enthalten ist. Innerhalb eines regulären Ausdrucks kann dies wie eine Variable behandelt werden.

Wenn Sie die Essenz ignorieren, ersetzen Sie . + / Eintrag / (\\ d +) / (\\ d +) / (\\ d +) /. + Durch `. + / Ich denke es ist leicht zu verstehen.

Da es sich um einen Prozess für eine Zeichenfolge handelt, wird das Ergebnis des Ausschneidens natürlich als Zeichenfolge zurückgegeben.

Eine andere Lösung

Die gleiche Verarbeitung kann wie folgt durchgeführt werden. Wenn Sie dies jedoch mehrmals tun, ist es effizienter, zuerst das Muster zu kompilieren.

String year = /*Zu vergleichende URL-Zeichenfolge*/.replaceFirst(".+/entry/(\\d+)/(\\d+)/(\\d+)/.+", "$1");

Bonus

Reguläre Ausdrücke können durch Debuggen auf den folgenden Websites verbessert werden (es gibt jedoch Unterschiede zwischen den Sprachen, daher sollten Sie auch einen Komponententest durchführen).

Recommended Posts

[Java] Schneiden Sie einen Teil der Zeichenfolge mit Matcher und regulären Ausdrücken aus
[Java] So verwenden Sie Teilzeichenfolgen, um einen Teil einer Zeichenfolge auszuschneiden
[Java] Der verwirrende Teil von String und StringBuilder
<java> Teilen Sie die Adresse vor und nach der Adresse mit einem regulären Ausdruck
[Java] So schneiden Sie eine Zeichenfolge zeichenweise aus
<Java> Quiz zum Batch-Konvertieren von Dateinamen, die durch eine bestimmte Zeichenfolge mit einem Teil des Dateinamens getrennt sind
Zeichenfolge Ersetzen von Fällen, in denen ein Zeilenumbruch in * des regulären Ausdrucks in der Suchbedingung einer Zeichenfolge enthalten ist
Ersetzen Sie durch einen Wert entsprechend der Übereinstimmung mit einem regulären Java-Ausdruck
Extrahieren Sie einen Teil einer Zeichenfolge in Ruby
[Ruby] Schneiden Sie eine Zeichenfolge mit der Slice-Methode aus
[Java] Umgang mit Zeichenketten (String-Klasse und StringBuilder-Klasse)
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
Extrahieren Sie Elemente, indem Sie mit Java reguläre Ausdrücke aus einer großen Menge von HTML ersetzen
[Java] Wenn Sie eine Zeichenfolge in die switch-Anweisung einfügen, müssen Sie sie zu einem konstanten Ausdruck machen
Schneiden Sie eine Ruby-Schnur aus
Memorandum Nr. 4 "Holen Sie sich eine Zeichenkette und dekorieren Sie sie" [Java]
[Java] Vergleichsmethode für Zeichenketten und Vergleichsmethode mit regulären Ausdrücken
Stellen Sie Datum und Uhrzeit aus der Zeichenfolge mit POI ein
Das n-te und n + 1-Zeichen einer Ruby-Zeichenfolge
Die Geschichte des Erstellens einer Java-Version des Minecraft-Servers mit GCP (und dem Festlegen einer weißen Liste)
Eine kleine Geschichte mit regulären Ausdrücken Teil 1
Lesen Sie die Datei unter dem Klassenpfad als Zeichenfolge mit spring
Herstellen einer Verbindung zu einer Datenbank mit Java (Teil 1) Möglicherweise die grundlegende Methode
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Eine kleine Geschichte über reguläre Ausdrücke Teil 2
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Stellen Sie die Sensorinformationen von Raspberry Pi in Java grafisch dar und überprüfen Sie sie mit einem Webbrowser
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Generieren Sie mit TableGenerator of Hibernate (JPA) eine Seriennummer und speichern Sie diese in der ID von String.
Eine Sammlung von Phrasen, die das "unterschiedliche Gefühl" von Java und JavaScript beeindruckt
Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
Ruft die als Argument übergebene Zeichenfolge als Methode mit send auf
Lassen Sie uns das Ergebnis der Analyse von Java-Bytecode in einem Klassendiagramm ausdrücken
[Java] Erstellen Sie mit dem Befehl jar eine JAR-Datei, die sowohl komprimiert als auch nicht komprimiert ist
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
[Java] Überprüfen Sie, ob die Zeichenfolge nur aus Leerzeichen besteht (= Leerzeichen)
[Java] Teilen Sie eine Zeichenfolge durch ein angegebenes Zeichen
Nennen Sie eine Gruppe regulärer Ausdrücke (Java)
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
[Rubiy] Ich möchte mit der Split-Methode ein Array aus einer Zeichenfolge erstellen. Und umgekehrt.
[Java] Unterschied zwischen gleich und == in einer Zeichenfolge, die ein Referenztyp ist
[Java] So erhalten Sie mithilfe von Stream auf einfache Weise die längste Zeichenfolge von ArrayList
Lesen Sie die Datei unter dem Klassenpfad als Zeichenfolge mit spring
Überprüfen Sie das ID-Token eines von AWS Cognito in Java authentifizierten Benutzers
Die Geschichte des einfachen String-Vergleichs in Java
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
[Löschen Sie den ersten Buchstaben der Zeichenfolge] Ruby
Geben Sie ein Suffix für die Methode an
Messen Sie die Größe eines Ordners mit Java
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
[Hinweis] Java: Messen Sie die Geschwindigkeit der Zeichenfolgenverkettung
Ich habe die Eigenschaften von Java und .NET verglichen
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Ich möchte die MD5-Prüfsumme einer Datei in Java finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation erhalten.