CS-Tual
Messages postés15Date d'inscriptionmercredi 25 mai 2011StatutMembreDernière intervention20 mai 2016
-
7 nov. 2013 à 16:49
CS-Tual
Messages postés15Date d'inscriptionmercredi 25 mai 2011StatutMembreDernière intervention20 mai 2016
-
8 nov. 2013 à 10:18
Bonjour,
Je travail actuellement sur la récupération de "morceaux de chaînes" contenus dans une chaine de caractère.
exemples de chaîne : "Rule(maRegle1) + Rule(maRegle2) == Rule(maRegle3)"
Le nombre de fois qu'apparaît l'expression "Rule(maReglen)" peut varier (apparaître 1 à autant de fois que l'on souhaite).
Mon objectif : uniquement récupéré les paramètres, ou règles, de Rule (soit : maRegle1, maRegle2, ...).
J'ai déjà trouvé une solution qui fonctionne pour le moment, mais c'est assez moche.
String stringExpression = "Rule(maRegle1) + Rule(maRegle2) == Rule(maRegle3)"; // on crée une liste qui recevra le nom des règles List<String> listRulesNames = new ArrayList<String>();
// on split stringExpression à chaque fois qu'une parenthese se ferme String[] stringExpressions = StringUtils.splitNoRegEx(stringExpression, ")"); // pour chaque "sous expression" ... for (int i = 0 ; i < stringExpressions.length ; i++) { //si elle contient au moins une fois Rule( if (stringExpressions[i].contains("Rule(")) { //on supprime tous les caractères se trouvant avant Rule( Pattern pattern = Pattern.compile("Rule(.*)"); Matcher matcher = pattern.matcher(stringExpressions[i]); while (matcher.find()) { // on obtient plus que le nom de la règle, que l'on vient ajouter dans la liste des règles listRulesNames.add(matcher.group(1).substring(1)); } } }
L'idéal pour moi serait de réussir à trouver le pattern idéal, qui permet de récupérer toutes les règles sans avoir à découper mon expression.
Sinon, je me posais une question, les patterns sont-ils très exigeant par rapport à la syntaxe de l'expression à laquellle il s'applique.
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 7 nov. 2013 à 17:13
salut !
L'expression régulière qui t'interessera sera (je pense) :
Rule\((.*?)\)
à noter que dans un string, il faudra doubler les '\' car c'est un echappement regex et non string (il faut donc echapper le string pour que l'echapement regex soit pris en compte.)
8 nov. 2013 à 10:18
Merci de ta réponse, ton pattern répond exactement à mon problème.
Sinon, j'ai moi aussi trouvé de mon coté un pattern qui répond aussi à mon problème.
Je poste le code de la solution avec les 2 patterns :