Facile à parcourir avec les expressions régulières Java

introduction

Voici quelques points sur lesquels trébucher avec les expressions régulières Java.

J'ai le sentiment que les personnes qui utilisent souvent des expressions régulières dans d'autres langues en sont accro.

Caractère d'échappement

Utilisez le caractère d'échappement \ lors de l'écriture d'une séquence d'échappement.

Cependant, si vous voulez exprimer une "barre oblique inverse" en type Java String, vous devez utiliser "\" qui est une sorte de séquence d'échappement.

J'ai perdu une journée entière.

Code qui génère une erreur de compilation


void check() {
    if (isFind("hoge.com")) {
        //Je ne peux pas courir
    }
}

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

Code qui compile


void check() {
    if (isFind("hoge.com")) {
        //Peut être exécuté
    }
}

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

Le fait est que si vous voulez représenter la séquence d'échappement \ . dans d'autres langues, vous devez écrire \\ .. Le libellé ici est déroutant, veuillez donc vous référer à la section des commentaires.

Matcher # group (int) n'est pas disponible immédiatement

La méthode group (int) de la classe Matcher lèvera une erreur d'exécution si vous n'utilisez pas la méthode find ().

C'est parce que la méthode find () vérifie une correspondance de chaîne. La méthode group (int) est juste le getter de la chaîne correspondant à la méthode find ().

Code qui génère une erreur d'exécution


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

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

String extract(String text) {
    Matcher m = p.matcher(text);
    //Erreur d'exécution!!!!!
    return m.group(1);
}

Code qui peut être exécuté correctement


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

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

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

en conclusion

Les expressions régulières sont écrites assez différemment selon la langue. Sachez que si vous pensez être bon dans une langue, vous vous blessez.

~~ Perl est si simple! ~~

Recommended Posts

Facile à parcourir avec les expressions régulières Java
Facile à créer LINE BOT avec Java Servlet
(Java) BDD facile avec Spectrum?
[Java] Résumé des expressions régulières
[Java] Introduction à l'expression lambda
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Remarques sur l'utilisation des expressions régulières en Java
Expression lambda Java apprise avec Comparator
Java pour apprendre avec les ramen [Partie 1]
[Java] Points à noter avec Arrays.asList ()
Analyser les adresses japonaises avec des expressions régulières
J'ai essayé d'interagir avec Java
Java, des tableaux pour débuter avec les débutants
Accès facile à la base de données avec Java Sql2o
Comment utiliser les expressions Java lambda
expression régulière java-pas de perte de savoir-
Expressions régulières
Remplacer par une valeur selon la correspondance avec une expression régulière Java
Comment compiler Java avec VsCode & Ant
Facile à créer Slack Bot avec Java
[Java] Résumez comment comparer avec la méthode equals
J'ai essayé de résumer les expressions Java lambda
Introduction aux algorithmes avec java-Search (recherche prioritaire en profondeur)
Introduction aux algorithmes avec java --Search (recherche de priorité de largeur)
Défi pour gérer les caractères déformés avec Java AudioSystem.getMixerInfo ()
[Java] Comment tester s'il est nul dans JUnit
Changer de beans avec les expressions canoniques @ConditionalOnExpression et SpEL
J'ai essayé de faire une authentification de base avec Java
Introduction aux algorithmes avec java --Search (bit full search)
Déployez des applications Web Java sur Azure avec maven
[Java] Résumé de la façon d'omettre les expressions lambda
Comment utiliser le framework Java avec AWS Lambda! ??
Faire correspondre les adresses IP à l'aide d'expressions régulières en Java
Comment utiliser l'API Java avec des expressions lambda
Premiers pas avec Kotlin à envoyer aux développeurs Java
Un moyen très simple d'utiliser enum avec JSP
[Java] Introduction à Java
Essayez d'implémenter TCP / IP + NIO avec JAVA
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Introduction à Java
Où les programmeurs Java ont tendance à trébucher sur Kotlin
J'ai essayé de casser le bloc avec java (1)
Facile à afficher Hello World avec Rails + Docker
Distinguer les entiers et les fractions avec des expressions régulières
Comment appeler des fonctions en bloc avec la réflexion Java
Traitement des listes à comprendre avec des images - java8 stream / javaslang-
Soumettre une tâche à AWS Batch avec Java (Eclipse)
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
[Ruby] Exclure et remplacer des modèles spécifiques par des expressions régulières
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
[Java] Comment omettre l'injection de constructeur de ressort avec Lombok
Comment déployer Java sur AWS Lambda avec Serverless Framework
[Java Silver] Résumé des points liés aux expressions lambda
[Java] Comment chiffrer avec le chiffrement AES avec une bibliothèque standard
[Java] Se référer et définir des variables privées avec réflexion
[Java] Comment exécuter des tâches régulièrement
Connexion HTTPS avec Java au serveur de certificats auto-signé