Einfach mit regulären Java-Ausdrücken zu stolpern

Einführung

Hier sind einige Punkte, auf die Sie bei regulären Java-Ausdrücken stoßen sollten.

Ich habe das Gefühl, dass Menschen, die häufig reguläre Ausdrücke in anderen Sprachen verwenden, davon abhängig sind.

Escape-Zeichen

Verwenden Sie das Escape-Zeichen \, wenn Sie eine Escape-Sequenz schreiben.

Wenn Sie jedoch "Backslash" im Java-String-Typ ausdrücken möchten, müssen Sie "\" verwenden, eine Art Escape-Sequenz.

Ich habe einen ganzen Tag verschwendet.

Code, der einen Kompilierungsfehler auslöst


void check() {
    if (isFind("hoge.com")) {
        //Kann nicht rennen
    }
}

boolean isFind(String text) {
    //Kompilierungsfehler!!!!!
    Pattern p = Pattern.compile("\.com");
    return p.matcher(text).find();
}

Code, der kompiliert wird


void check() {
    if (isFind("hoge.com")) {
        //Kann ausgeführt werden
    }
}

boolean isFind(String text) {
    Pattern p = Pattern.compile("\\.com");
    return p.matcher(text).find();
}

Der Punkt ist, dass Sie, wenn Sie die Escape-Sequenz "." In anderen Sprachen darstellen möchten, "\." Schreiben müssen. Der Wortlaut hier ist verwirrend. Bitte lesen Sie den Kommentarbereich.

Matcher # group (int) ist nicht sofort verfügbar

Die group (int) -Methode der Matcher-Klasse gibt einen Laufzeitfehler aus, wenn Sie die find () -Methode nicht verwenden.

Dies liegt daran, dass die Methode find () nach einer Zeichenfolgenübereinstimmung sucht. Die Methode group (int) ist nur der Getter des Strings, der mit der Methode find () übereinstimmt.

Code, der einen Laufzeitfehler auslöst


Pattern p = Pattern.compile("(A*).");

void print() {
    System.out.println(extract(AAABBB));
}

String extract(String text) {
    Matcher m = p.matcher(text);
    //Laufzeit Fehler!!!!!
    return m.group(1);
}

Code, der ordnungsgemäß ausgeführt werden kann


Pattern p = Pattern.compile("(A*).");

void print() {
    System.out.println(extract(AAABBB)); //Ausgabe: AAA
}

String extract(String text) {
    Matcher m = p.matcher(text);
    if (m.find()) {
        return m.group(1);
    } else {
        return "";
    }
}

abschließend

Reguläre Ausdrücke werden je nach Sprache sehr unterschiedlich geschrieben. Seien Sie sich bewusst, dass Sie verletzt werden, wenn Sie denken, dass Sie in einer Sprache gut sind.

~~ Perl ist so einfach! ~~

Recommended Posts

Einfach mit regulären Java-Ausdrücken zu stolpern
Einfacher LINE BOT mit Java Servlet
(Java) Einfache BDD mit Spektrum?
[Java] Zusammenfassung der regulären Ausdrücke
[Java] Einführung in den Lambda-Ausdruck
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Hinweise zur Verwendung regulärer Ausdrücke in Java
Java-Lambda-Ausdruck, der mit Comparator gelernt wurde
Java mit Ramen lernen [Teil 1]
[Java] Mit Arrays.asList () zu beachtende Punkte
Analysieren Sie japanische Adressen mit regulären Ausdrücken
Ich habe versucht, mit Java zu interagieren
Java, Arrays für Anfänger
Einfacher Datenbankzugriff mit Java Sql2o
Verwendung von Java-Lambda-Ausdrücken
Java regulärer Ausdruck - kein Wissensverlust -
Reguläre Ausdrücke
Ersetzen Sie durch einen Wert entsprechend der Übereinstimmung mit einem regulären Java-Ausdruck
So kompilieren Sie Java mit VsCode & Ant
Einfach, Slack Bot mit Java zu machen
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Einführung in Algorithmen mit Java-Suche (Tiefenprioritätssuche)
Einführung in Algorithmen mit Java --Search (Breitenprioritätssuche)
Herausforderung, mit verstümmelten Zeichen mit Java AudioSystem.getMixerInfo () umzugehen
[Java] So testen Sie, ob es in JUnit null ist
Wechseln Sie die Beans mit den kanonischen Ausdrücken @ConditionalOnExpression und SpEL
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Einführung in Algorithmen mit Java --Search (Bit Full Search)
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
[Java] Zusammenfassung, wie Lambda-Ausdrücke weggelassen werden
Verwendung des Java-Frameworks mit AWS Lambda! ??
Passen Sie IP-Adressen mithilfe regulärer Ausdrücke in Java an
Verwendung der Java-API mit Lambda-Ausdrücken
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Super einfache Möglichkeit, Enum mit JSP zu verwenden
[Java] Einführung in Java
Versuchen Sie, TCP / IP + NIO mit JAVA zu implementieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Einführung in Java
Wo Java-Programmierer dazu neigen, über Kotlin zu stolpern
Ich habe versucht, den Block mit Java zu brechen (1)
Mit Rails + Docker einfach Hallo Welt anzuzeigen
Unterscheiden Sie mit regulären Ausdrücken zwischen ganzen Zahlen und Brüchen
Aufrufen von Funktionen in großen Mengen mit Java Reflection
Listenverarbeitung zum Verstehen mit Bildern --java8 stream / javaslang-
Senden Sie einen Job an AWS Batch mit Java (Eclipse)
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
[Ruby] Schließen Sie bestimmte Muster aus und ersetzen Sie sie durch reguläre Ausdrücke
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
[Java] So lassen Sie die Federkonstruktorinjektion mit Lombok weg
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
[Java Silver] Zusammenfassung der Punkte im Zusammenhang mit Lambda-Ausdrücken
[Java] Verschlüsselung mit AES-Verschlüsselung mit Standardbibliothek
[Java] Verweisen Sie auf und setzen Sie private Variablen mit Reflektion
[Java] Wie man Aufgaben regelmäßig ausführt
HTTPS-Verbindung mit Java zum selbstsignierten Zertifikatsserver