Tutoriel Regex – Les expressions régulieres les plus utiles en Java

Les expressions régulières font parties des concepts les plus puissants en informatiques et pas des moins utiles en programmation avancée. Elles sont couramment utilisées pour vérifier ou aider l’utilisateur, lors d’entrées texte. Nous allons décrire rapidement comment utiliser les expressions régulières en Java et retracer les expressions régulières les plus couramment utiliser.

Du à un problème technique avec mon blog, le caractère guillemet «  est parfois remplacé dans le code source donné en en exemple par #8243; Je tache de résoudre cela des que possible.

Qu’est ce qu’une expression régulière ?

Une expression régulière est une suite de caractères typographiques (qu’on appelle plus simplement « motif » ou « pattern » dans sa forme anglaise) chargée de décrire une chaîne de caractères pour la trouver dans un bloc de texte et lui appliquer un traitement automatisé. On l’utilise pour reconnaitre certains modèle d’entrée utilisateurs, comme un numéro de téléphone, un code postal ou une adresse e-mail.

Comment définir une expression régulière?

Il existe des milliers de tutoriels sur Internet, des sites uniquement dédiés aux expressions régulières et même des livres. Au lieu de redire ce qui a déjà été dit et redit, je vous envoie sur l’un d’entre eux:

Comment rechercher du texte à partir d’une expression régulière en Java ?

Méthode 1 – Avec Pattern & Matcher

On recherche la position du mot « Peugeot » dans la phrase « La 504 Peugeot: Une Peugeot d’exception ».

String motif = "Peugeot";
String chaine = "La 504 Peugeot: Une Peugeot d'exception";
 
Pattern p = Pattern.compile(motif);
Matcher m = p.matcher(chaine);
 
while(m.find()) {
	System.out.println("Position: " + m.start() + "-" + m.end());
}

Affichera:
Position: 7-14
Position: 20-27

Souvenez vous que les positions sont 0-based.

Méthode 2 – Avec Scanner

Avec cette méthode, on cherche tous les mots correspondant au motif.

String motif = "Peugeot";
String chaine = "La 504 Peugeot: Une Peugeot d'exception";
 
Scanner s = new Scanner(chaine);
String token;
do {
	token = s.findInLine(motif);
	System.out.println("Element: " + token);
} while (token != null);

Affichera:

Element: Peugeot
Element: Peugeot
Element: null

Méthode 3 – Verifie qu’une chaine correspond exactement à un motif

A la différence des autres méthodes, on ne recherche pas un motif, on le confirme!

String motif = "[0-9]+";
String chaine = "65844";
 
if(chaine.matches(motif) ){
	System.out.println("est une suite de chiffre");
}else{
	System.out.println("Autre");
}

Affichera:
est une suite de chiffre

Modèle d’expression régulière utile en Java

Username

Nous allons tacher de valider ou de reconnaitre ce qui pourrait bien être un login… seulement des minuscules, des chiffres, l’utilisation de _ ou de -, mais pas de caractères spéciaux et faisant entre 5 et 15 caractères.

String motif = "[a-z0-9_-]{5,15}";
String chaine = "Login: newic500";

Méthode 1:
Position: 7-15
Méthode 2:
Element: newic500
Element: null

Adresse E-Mail

String motif = "(\\w+)@(\\w+\\.)(\\w+)(\\.\\w+)*";
String chaine = "Mon email: nospam@spam.com";

Téléphone

Recherche un numéro de téléphone au format français: formé de 5 blocs de 2 chiffres avec n’importe quel caractere entre chaque bloc.

String motif = "([0-9]{2}.){4}[0-9]{2}";
String chaine = "Mon tel est le 01-03-74-96-11";

Méthode 1:

Position: 15-29

Méthode 2:
Element: 01-03-74-96-11
Element: null

Adresse IP

Retrouver la forme d’une adresse IP. Attention, une IP 999.999.999.999, techniquement impossible, pourrait etre déclaré valide avec ce modèle

String motif = "[0-9]{1,3}(?:.[0-9]{1,3}){3}";
String chaine = "Mon IP est 192.168.0.1";

Méthode 1:
Position: 11-22

Méthode 2:
Element: 192.168.0.1
Element: null

Adresse principale d’un site web.

String motif = "[a-z]{3,}://[a-z0-9-]+.[.a-z0-9-]+(?::[0-9]*)?";
String chaine = "Mon site est http://5.freshminutes.it/index.php";

Méthode 1:
Position: 13-35

Méthode 2:
Element: http://5.freshminutes.it
Element: null

Sources: