Les expressions régulières en Java
Généralités
Le langage Java a été créé en 1991 chez Sun Microsystems par une équipe constituée de James Gosling, Patrick Naughton, Mike Sheridan et quelques autres développeurs. C’est un langage orienté objet avec une syntaxe proche du C++. Son but était d’être plus universel et plus facile à apprendre que le C ou le C++, tout en possédant une syntaxe proche de ces derniers langages afin de permettre un apprentissage rapide, et de rendre possible la création de code embarqué dans de petits appareils et des systèmes distribués. Il a connu une forte croissance et possède toujours une forte popularité, bien que celle-ci semble toutefois être en léger déclin depuis quelques années. Du statut initial de langage, il est passé depuis quelques années au statut de technologie puisqu’il est associé au JDK (Java Development Kit), au JRE (Java Runtime Environment) et à la JVM (Java Virtual Machine) qui forment un environnement de développement et d’exécution. Le code produit par le compilateur Java génère un code intermédiaire (bytecode) qui doit être traduit par la machine virtuelle Java pour pouvoir être exécuté. Java est maintenant utilisé dans de très nombreux environnements...
Les expressions régulières
Les expressions régulières utilisées par Java sont proches du standard PCRE, mais elles apportent quelques syntaxes nouvelles ou comportent parfois des différences mineures, et le fait d’utiliser ces syntaxes spécifiques peut conduire à des difficultés de portage vers d’autres langages. Il est donc conseillé de les éviter autant que possible et de préférer les expressions dont la syntaxe est comprise par une majorité d’interpréteurs.
Toutefois, pour ceux qui souhaiteraient utiliser les expressions de type Java, cette syntaxe est décrite dans le chapitre Synthèse des types d’expressions dans une section dédiée à Java.
En ce qui concerne l’utilisation des expressions régulières, celles-ci sont compilées par une fonction dédiée, puis l’expression compilée peut être utilisée par des méthodes de recherche de correspondances ou de substitution de chaînes, comme cela existe dans d’autres langages.
Manipulation des expressions régulières
Les fonctions que nous aborderons dans ce chapitre font partie du package java.util.regex.
Dans tous les exemples qui seront donnés, il faudra utiliser l’en-tête standard suivant :
import java.util.regex.Pattern;
import java.util.regex.Matcher;
Ce dernier ne sera pas répété dans les exemples de façon à les simplifier.
Pour compiler un programme Java exemple.java, il faudra utiliser la commande suivante :
$ javac exemple.java
Son exécution sera réalisée par la commande :
$ java exemple
1. Compilation d’expression régulière
Fonction Pattern.compile()
La méthode Pattern.compile() compile une expression régulière passée sous la forme d’un objet de type String et retourne un objet de type Pattern, ou provoque une exception si l’expression est incorrecte et ne peut être compilée. L’objet retourné peut ensuite être utilisé pour appeler les méthodes permettant d’effectuer des recherches de correspondances, des substitutions, des découpages de chaînes, etc.
Syntaxe
String regex = "expression_régulière";
Pattern pattern = Pattern.compile(regex);
Exemple
String regex = "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})";
Pattern pattern = Pattern.compile(regex);
2. Recherche de chaînes
a. Fonction Pattern.matcher()
La méthode Pattern.matcher() accepte en paramètre une chaîne de caractères et retourne un objet de type Matcher qui peut servir à déterminer s’il y a une correspondance entre l’expression régulière et la chaîne de caractères passée, à trouver des correspondances, à extraire des chaînes correspondant à des fragments de l’expression, etc.
Syntaxe
String text = "texte à analyser";
Matcher matcher = pattern.matcher(text);
Exemple
String regex = "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})";
String text = "2024-05-25";
Pattern pattern = Pattern.compile(regex);
Matcher matcher...