Les expressions régulières en Java
Les expressions régulières ou Regex est une API pour définir des motifs qui peuvent être utilisés pour rechercher, manipuler et éditer une chaîne de caractères en Java. La validation des e-mails et les mots de passe sont quelques exemples où nous appliquons Regex. Regex est largement utilisé pour définir les contraintes. Les expressions régulières sont fournies sous le package java.util.regex. Cela se compose de 3 classes et une interface.
Classe Matcher
Il implémente l’interface MatchResult. Il s’agit d’un moteur d’expression régulière qui est utilisé pour effectuer des opérations de correspondance sur une séquence de caractères.
boolean matches() | tester si l’expression régulière correspond au motif. |
boolean find() | trouve l’expression suivante qui correspond au motif. |
boolean find(int start) | trouve l’expression suivante qui correspond au motif à partir de « start ». |
int start() | renvoie l’index de départ de la chaîne correspondante. |
int end() | renvoie l’index de fin de la chaîne correspondante. |
String group() | renvoie la chaîne correspondante. |
int groupCount() | renvoie le nombre total de chaîne correspondante. |
Classe Pattern
Cette classe est une compilation d’expressions régulières qui peuvent être utilisées pour définir différents types de motifs, ne fournissant aucun constructeur public. Cela peut être créé en invoquant la méthode compile() qui accepte une expression régulière comme premier argument, donc retourne un motif après l’exécution.
static Pattern compile(String regex) | compile l’expression régulière donnée et retourne l’instance du Pattern. |
Matcher matcher(CharSequence input) | crée un matcher qui fait correspondre l’entrée donnée avec le motif. |
static boolean matches(String regex, CharSequence input) | Il fonctionne comme une combinaison de compile et matcher. Il compile l’expression régulière et fait correspondre l’entrée donnée avec le motif. |
String[] split(CharSequence input) | Il est utilisé pour diviser la séquence d’entrée donnée selon un motif. |
String pattern() | renvoie le pattern regex. |
Classe PatternSyntaxException
Cette classe est utilisé pour indiquer une erreur de syntaxe dans un motif et est une exception non vérifiée.
String getDescription() | Il est utilisé pour récupérer la description de l’erreur. |
int getIndex() | Il est utilisé pour récupérer l’indice d’erreur. |
String getMessage() | Il est utilisé pour renvoyer une chaîne contenant la description de l’erreur, syntaxe et son index. |
String getPattern() | Il est utilisé pour récupérer le pattern erroné. |
Exemple 1:
import java.util.regex.Pattern; public class Main { public static void main(String args[]) { System.out.println(Pattern.matches("H.llo", "Hello")); System.out.println(Pattern.matches("H*llo", "Hello")); } }
Sortie:
true false
- (.) n’importe quel caractère.
- (*) zéro ou plusieurs caractères.
Exemple 2:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args[]) { //créer un motif à trouver Pattern pattern = Pattern.compile("way"); //trouver le motif ci-dessus dans "waytolearnx.com" Matcher m = pattern.matcher("waytolearnx.com"); //afficher l'index de début et fin du motif dans "waytolearnx.com" while (m.find()){ System.out.println("Start: " + m.start() + " End: " + (m.end()-1)); } } }
Sortie:
Start: 0 End: 2
Exemple 3:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args[]) { // Créer un motif à trouver Pattern pattern = Pattern.compile("(alex|bob)"); // Trouver le motif ci-dessus dans "Hello alex" Matcher m = pattern.matcher("Hello alex"); // Afficher l'index de début et de fin du motif dans "Hello alex" while (m.find()){ System.out.println("Start: " + m.start() + " End: " + (m.end()-1)); } } }
Sortie:
Start: 6 End: 9
Regardons quelques opérateurs utilisé dans les expressions régulières.
^ | Il indique le début d’une chaîne de caractères. |
$ | Il indique la fin d’une chaîne. |
. | Il indique presque n’importe quel caractère. |
() | Il indique un groupe d’expressions. |
[] | Il trouve une plage de caractères, par exemple [xyz] signifie x, y ou z . |
[^] | Il trouve les éléments qui ne sont pas dans la plage, par exemple [^abc] signifie tout sauf a, b ou c. |
– (tiret) | Trouve la plage de caractères dans la plage d’éléments donnée, par exemple [a-z] signifie de a à z. |
| (pipe) | C’est le OU logique par exemple x | y signifie x OU y. |
? | Il indique zéro ou un caractère précédent. |
* | Il indique zéro ou plusieurs caractères précédents. |
+ | Il indique un ou plusieurs caractères précédents. |
{n} | Il indique exactement n fois la plage de caractères précédents. |
{n, } | Il indique au moins n fois le caractère ou la plage d’éléments précédents. |
{n, m} | Il indique au moins n mais pas plus de m fois, par exemple x{2, 4} signifie x répété 2 à 4 fois. |
\ | Il indique le caractère d’échappement. |
Le tableau suivant montre quelques expressions régulières et la chaîne correspondante.
xxx | La chaîne « xxx » |
^xxx | La chaîne qui commence par « xxx » |
xxx$ | La chaîne qui se termine par « xxx ». |
^xxx$ | La chaîne ne contient que « xxx ». |
he*llo | Correspond à llo, hello ou hehello, mais pas hellooo |
hello+ | Il correspondra à hello ou plus. Par exemple, hello, hellohello ou hellohellohello |
he?llo | Il correspondra à llo ou hello |
he.o | Il correspondra à n’importe quel caractère entre he et o. Les correspondances possibles sont helo ou hero, mais pas hello |
[abc] | a, b, ou c |
[a-z] | Correspond à n’importe quelle lettre minuscule |
[^A-Z] | Toute les lettres sauf les lettres majuscules |
(a|b) | Soit « a » ou « b » |
[a-z]+ | Une ou plusieurs lettres minuscules |
^[a-zA-Z0-9._-] | Correspond à n’importe quelle lettre minuscule ou majuscule, à des chiffres entre 0 et 9 et à des points, des caractères de soulignements ou des tirets. |
+@[a-zA-Z0-9-] | Correspond au symbole @ suivi de lettres minuscules ou majuscules, des chiffres entre 0 et 9 ou des tirets. |
+\.[a-zA-Z.]{2,5}$/ | Échappe le point à l’aide de \, puis fait correspondre toute lettre minuscule ou majuscule ayant une longueur de caractère comprise entre 2 et 5 à la fin de la chaîne. |
Regardons à certains des caractères spéciaux utilisés dans les expressions régulières.
\n | Il indique une nouvelle ligne. |
\r | Il indique un retour de chariot. |
\t | Il indique une tabulation. |
\s | Correspond aux caractères d’espacement comme l’espace, le saut de ligne ou la tabulation. |
\d | Correspond à n’importe quel chiffre de 0 à 9. |
\w | Correspond à des les lettres minuscules, majuscules, les chiffres et le caractères de soulignement. |