Programmation Java/Regex

Un livre de Wikilivres.
Aller à : navigation, rechercher


Syntaxe[modifier | modifier le wikicode]

Expressions rationnelles courantes
Caractère Type Explication
. Point n'importe quel caractère
[...] classe de caractères tous les caractères énumérés dans la classe
[^...] classe complémentée Tous les caractères sauf ceux énumérés
^ circonflexe marque le début de la chaine, la ligne...
$ dollar marque la fin d'une chaine, ligne...
| barre verticale alternative - ou reconnaît l'un ou l'autre
(...) parenthèse utilisée pour limiter la portée d'un masque ou de l'alternative
* astérisque 0, 1 ou plusieurs occurrences
+ le plus 1 ou plusieurs occurrence
 ? interrogation 0 ou 1 occurrence

Les expressions rationnelles en Java nécessitent le package java.util.regex.

Elles proposent les mêmes constructeurs spéciaux que le C++, soit X une expression :

  • (?:X) : groupe non capturant
  • (?>X) : groupe non capturant indépendant
  • (?=X) : avec lookahead positif
  • (?!X) : avec lookahead négatif
  • (?<=X) : avec lookbehind positif
  • (?<!X) : avec lookbehind négatif

Recherches[modifier | modifier le wikicode]

La classe Pattern offre la fonction matches qui renvoie si une expression est trouvée dans une chaine.

Le mot précédant un autre :

import java.util.regex.Pattern;
public class Regex {
	public static void main(String[] args) {
		String chaine1 = "Test regex Java pour Wikibooks francophone.";
		System.out.println(Pattern.matches("[a-z]* Wikibooks",chaine1));
    }
}
// Affiche : "pour Wikibooks"


La classe Matcher permet de trouver les résultats d'un expression avec différentes méthodes :

  1. find() : trouve le résultat suivant.
  2. group() : affiche le résultat.

Afficher ce qui est entre les balises HTML b :

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Regex {
	public static void main(String[] args) {
		String chaine = "Test <b>regex</b> <i>Java</i> pour <b>Wikibooks</b> francophone.";
		Pattern p = Pattern.compile("<b>([^<]+)</b>");
		Matcher m = p.matcher(chaine);
		while(m.find()) {
			System.out.println(m.group());
			System.out.println(m.group(1));
		}
	}
}
/* Affiche :
 <b>regex</b>
 regex
 <b>Wikibooks</b>
 Wikibooks
*/

Remplacements[modifier | modifier le wikicode]

On utilise la méthode String.replaceAll().

Références[modifier | modifier le wikicode]