Problème avec les expressions régulières java

Bonjour,

je travaille pour la première fois sur les expressions régulières avec java, je rencontre un problème qui me bloque

pour bien vous expliquer voici mon code source:

package Tests;

import java.io.*;
import java.util.regex.*;

public class Expregulieres {

private static Pattern pattern1, pattern2, pattern3, pattern4;
private static Matcher matcher1, matcher2, matcher3, matcher4;

static int nbr,nbr1, nbr2 = 0;

// TODO Auto-generated constructor stub

// creation d'une methode

public void Test1 () {

// pour reconnaitre les mots REQ00? (les ID exigences)

pattern1 = Pattern.compile("REQ_\\d\\d\\d(.*)");

// pour reconnaitre du texte avec les blancs et les ''

pattern2 = Pattern.compile("Requirement_text(.*)");

//pour reconnaitre les references dans un doc d'exigence

pattern3 = Pattern.compile("covered_Requirement(.*)");

//pour reconnaitre les references dans un doc d'exigence

pattern4 = Pattern.compile("Allocated(.*)");

String texte =

// pour toutes exigences

"REQ_001: la premiere exigence\n" +

"Requirement_text: c'est une description d'une exigence1\n" +
"Requirement_text: c'est une description d'une exigence!!!!!!!!!!!!!!!\n" +
"covered_Requirement: la premiere reference vers \n"+
"covered_Requirement: la 2eme reference vers \n"+

"REQ_002: la deuxieme exigence\n" +

"Requirement_text: Perle\n" +
"Pourquoi pas" +
"ceci est du texte!!!!"+
"covered_Requirement: la 3eme reference vers \n"+
"Allocated: ceci est un attribut number one \n"+
"Allocated: ceci est un attribut number two \n";

// création d'un moteur de recherche

matcher1 = pattern1.matcher(texte);
matcher3 = pattern3.matcher(texte);
matcher2 = pattern2.matcher(texte);
matcher4 = pattern4.matcher(texte);

//utiliser une boucle for pr lire tt le string texte

while (matcher1.find()) {

System.out.println( matcher1.group()) ;

while( matcher2.find())

System.out.println(matcher2.group());

while (matcher3.find())

System.out.println( matcher3.group()) ;

while (matcher4.matches())

System.out.println( matcher4.group()) ;

} //fin du while principal

} //fin de la methode

}// fin de la classe

voici le résultat de l'exécution :

REQ_001: la premiere exigence
Requirement_text: c'est une description d'une exigence1
Requirement_text: c'est une description d'une exigence!!!!!!!!!!!!!!!
Requirement_text: Perle
covered_Requirement: la premiere reference vers
covered_Requirement: la 2eme reference vers
covered_Requirement: la 3eme reference vers
REQ_002: la deuxieme exigence

hors que l'affichage que je souhaite avoir c'est :

REQ_001: la premiere exigence\n
Requirement_text: c'est une description d'une exigence1\
Requirement_text: c'est une description d'une exigence!!!!!!!!!!!!!!!\n
covered_Requirement: la premiere reference vers \n
covered_Requirement: la 2eme reference vers \n

REQ_002: la deuxieme exigence\n

Requirement_text: Perle\
covered_Requirement: la 3eme reference vers \n
Allocated: ceci est un attribut number one \n
Allocated: ceci est un attribut number two \n

Merci de m'aider le plus tôt possible c'est urgent !!!
Je vous remercie d'avance

1 réponse

  1. je sais que c'est un peu tard pour répondre mais je ne connais pas la regex en java(rapidement) mais ce que j'ai appris ressemble vraiment à la regex en javascript question rédaction de la regex(et oui, en javascript il n'y à pas d'initialisation avec pattern et le reste) alors ça donne:
    /regex/ : les slash correspond à la délimitation de la regex
    /regex|regexp/ : la pipe correspond à "ou la regex....."
    /gr[ioèa]s/ : correspond aux mots: gris, gros, grès et gras mais un des quatre
    /[a-z1-9]/ : correspond aux lettres de a à z(sans majuscule) et aux chiffre de 1 à 9
    + : le caractère précèdent doit apparaitre au moins une fois
    ? : le caractère précédent doit apparaitre une fois ou deux
    * : le caractère précédent doit apparaitre 0,1 fois (facultatif) ou une fois

    il en existe d'autre mais je ne m'en souvient plus...