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

[Fermé]
Signaler
-
Messages postés
38
Date d'inscription
jeudi 21 février 2013
Statut
Membre
Dernière intervention
28 mai 2014
-
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

Messages postés
38
Date d'inscription
jeudi 21 février 2013
Statut
Membre
Dernière intervention
28 mai 2014
3
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...