Reg Ex Java
Reg Ex Java
Reg Ex Java
en Java
avec l’API Regex
Hugo Etiévant
Pattern
Représentation compilée d’un motif.
Matcher
Moteur de recherche d’un motif dans une chaîne de
caractères.
PatternSyntaxException
Exception lancée lorsqu’une erreur apparaît dans la
syntaxe des motifs employés.
1. Chaînes littérales
2. Méta caractères
3. Classes de caractères
4. Quantificateurs
5. Groupes de capture
6. Frontières de recherche
Exemple :
Motif : "simple chaîne de caractères"
Chaîne à traiter : "autre simple chaîne de caractères"
Résultat trouvé : "simple chaîne de caractères"
Caractère Description
. Remplace tout caractère
* Remplace une chaîne de 0, 1 ou plusieurs caractères
? Remplace exactement un caractère
() Groupe capturant
[] Intervalle de caractères
{} Quantificateur
\ Déspécialise le caractère spécial qu’il précède
^ Négation ou début de ligne
$ Fin de ligne
| Ou logique entre deux sous-motifs
+ Numérateur
Hugo Etiévant http://cyberzoide.developpez.com 9
Classes de caractères ( 1)
Une classe de caractères est un ensemble de caractères. Il existe des classes
prédéfinies par l’API mais d’autres ensembles peuvent être construits par le
programmeur.
Classe Description
\d Un chiffre, équivalent à : [0-9]
\D Un non chiffre : [^0-9]
\s Un caractère blanc : [ \ t\ n\ x0B\ f\ r]
\S Un non caractère blanc : [^\ s]
\w Un caractère de mot : [a-zA-Z_0-9]
\W Un caractère de non mot : [^\ w]
. Tout caractère
Quantificateurs
X{ n} X{ n} ? X{ n} + Exactement n fois
Motif : "(a((b)(c)))"
- groupe 0 : (a((b)(c)))
- groupe 1 : (a((b)(c)))
- groupe 2 : ((b)(c))
- groupe 3 : (b)
- groupe 4 : (c)
Chaîne à traiter : "abc"
Résultats trouvés :
- groupe 0 : "abc",
- groupe 1 : "abc",
- groupe 2 : "bc",
- groupe 3 : "b",
- groupe 4 : "c"
Hugo Etiévant http://cyberzoide.developpez.com 18
Groupes de captures ( 3)
Après application de la regex sur une chaîne, il est
possible de connaître le nombre de sous-chaînes
capturées avec la méthode groupCount() de l’objet
Matcher.
La méthode group(int group) retourne la sous-chaîne
capturée par le groupe n°group.
Méthode Description
int groupCount() Nombre de sous-chaînes capturées
string group() Sous-chaîne capturée par la dernière recherche
string group(int group) Sous-chaîne capturée par le groupe group
boolean find() Recherche de la prochaine sous-chaîne satisfaisant la regex
boolean find(int start) Recherche de la prochaine sous-chaîne satisfaisant la regex,
en commençant la recherche à l’index start
int start() Index de début de la sous-chaîne capturée
int start(int group) Index de début de la sous-chaîne capturée par le groupe
group
int end() Index de fin de la sous-chaîne capturée
int end(int group) Index de fin de la sous-chaîne capturée par le groupe group
Exemples :
Motif : "(\ d\ d)\ 1" Motif : "(\ d\ d)\ 1"
Chaîne à traiter : "1515" Chaîne à traiter : "1789"
Résultat trouvé : "1515" Résultat trouvé : aucun
Dans cet exemple, le premier groupe capturant est (\ d\ d) c’est-à-dire
deux chiffres successifs. La suite du motif : \ 1 signifie qu’il faut
trouver à la suite de la sous-chaîne vérifiant \ d\ d une sous-chaîne
identique à celle capturée.
1) Ici, 15 est la sous-chaîne capturée par (\ d\ d), à sa suite, 15 est
effectivement identique à la première.
2) Ici, 17 est capturée, mais 89 qui la suit ne lui est pas égale, même
si elle vérifie le motif initial \ d\ d elle n’est pas égale à l’occurrence
capturée.
Spécificateur Description
^ Début de ligne
$ Fin de ligne
\b Extrémité de mot
\B Extrémité d’un non mot
\A Début de la chaîne soumise
\G Fin de l’occurrence précédente
\Z Fin de la chaîne soumise, à l’exclusion du caractère final
\z Fin de la chaîne soumise
Exemples :
Pattern p = Pattern.compile("^ [ abc] $",
Pattern.CASE_INSENSITIVE);
Objet Matcher
Syntaxe :
boolean matches() ;
Exemple :
/ / compilation de la regex
Pattern p = Pattern.compile("(a((b)(c)))");
/ / création d’un moteur de recherche
Matcher m = p.matcher("abc");
/ / lancement de la recherche de toutes les occurrences
boolean b = m.matches();
Objet Pattern
Syntaxe :
static boolean matches(String regex, CharSequence input)
Exemple :
/ / lancement de la recherche de toutes les occurrences
boolean b = Pattern.matches("(a((b)(c)))", "abc");
Syntaxe :
String[ ] split(CharSequence input [ , int limit] )
Exemple :
/ / compilation de la regex
Pattern p = Pattern.compile(":");
/ / séparation en sous-chaînes
String[ ] items = p.split("un:deux:trois");
Hugo Etiévant http://cyberzoide.developpez.com 32
Méthode split( ) – exemple ( 2)
Exemple complet :
/ / compilation de la regex
Pattern p = Pattern.compile("\ \ W");
/ / séparation en sous-chaînes
String[ ] items = p.split("J’aime le chocolat.", 10);
/ / parcours du tableau des sous-chaînes
for(int i= 0; i< items.length; i+ + ) {
System.out.println(items[ i] );
}
Syntaxe :
String replaceFirst(String replacement)
String replaceAll(String replacement)
Hugo Etiévant
[email protected]
http:/ / cyberzoide.developpez.com/