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.
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édiatementLa 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 "";
}
}
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