Les expressions régulières

Méta caractères

Ce sont des caractères qui sont interprétés par l'analyseur. Pour qu'un méta-caractère ne soit par interprété par l'analyseur, il faut le faire précéder du caractère '\'. Les caractères '-' et ']' ont un statut spécial : dans un intervalle ce sont des méta-caractères, et en dehors d'un intervalle ils se comportent comme des caractères normaux.

Caractère Description
.Remplace n'importe quel caractère, sauf la fin de ligne.
?Opérateur portant sur l'expression précédente : 0 ou une fois l'expression précédente.
*Opérateur de Kleene : 0, 1 ou plusieurs fois l'expression précédente.
+1 ou plusieurs fois l'expression précédente.
[]Intervalle de caractères.
{}Quantificateur.
\Le caractère qui suit n'est plus considéré comme un méta-caractère.
^Négation ou début de ligne.
$Fin de ligne.
|Opérateur ou.

Les quantificateurs

Caractère Description
+une ou plusieurs occurrences
*zéro, une ou plusieurs occurrences
?zéro ou une occurrence
{n}exactement n occurrences
{n,}au moins n occurrences
{n,m}de n à m (inclus) occurrences

Suite de caractère

Abréviation Description
\dUn chiffre : équivalent à [0-9]
\Dun caractère qui n'est pas un chiffre : équivalent à [^0-9]
\sUn caractère blanc : espace, tabulation, retour à la ligne ... équivalent à [ \t\n\r\f\x0B]
\SUn caractère non blanc : [^\s]
\wUn caractère de mot : [a-zA-Z_0-9]
\WUn caractère qui n'est pas un caractère de mot : [^\w]
\p{javaLowerCase}Equivalent to java.lang.Character.isLowerCase()
\p{javaUpperCase}Equivalent to java.lang.Character.isUpperCase()
\p{javaWhitespace}Equivalent to java.lang.Character.isWhitespace()
\p{javaMirrored}Equivalent to java.lang.Character.isMirrored()

En java

Trois classes interviennent dans les utilisations d'expressions régulières en Java :

  • Pattern : permet d'obtenir une version compilée d'une expression régulière.
  • Matcher : permet d'analyser une chaîne en entrée à partir d'un Pattern.
  • PatternSyntaxException : exception levée lorsque la syntaxe d'une expression régulière n'est pas correcte.
try{
  Pattern p = Pattern .compile("a*b|c");
   
  String entree = "aabbbcab";
   
  Matcher m = p.matcher(entree);
   
  while (m.find())
   System.out.println(entree.substring(m.start(), m.end()));
  }catch(PatternSyntaxException pse){
}
Pattern pattern = Pattern.compile(REGEX);

Matcher matcher = pattern.matcher(newText);

if (matcher.lookingAt()) {
  //...
}

Liens