-
[Débutant(e)]Regex
Bonjour à tous,
Voilà j'ai besoin de récupérer le corps de plusieurs méthodes dans un code source Java. Je pense faire en utilisant une expression régulière qui capture toute chaine de caractère se trouvant entre {..} mais également les {...} imbriquées. J'aimerais savoir si c'est réalisable et quel serait l'expression type pour ce genre d'opération ?
-
Code:
[A-Za-z0-9;._:,=*()\\[\\]+-<>& ]*{[A-Za-z0-9;._:,=*()\\[\\]+-<>&{} ]*}[A-Za-z0-9;._:,=*()\\[\\]+-<>& ]*
-
Je pense qu'il y a un soucis:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 30
[A-Za-z0-9;._:,=*()\[\]+-<>& ]*{[A-Za-z0-9;._:,=*()\[\]+-<>&{} ]*}[A-Za-z0-9;._:,=*()\[\]+-<>& ]*
^
at java.util.regex.Pattern.error(Pattern.java:1650)
at java.util.regex.Pattern.closure(Pattern.java:2706)
at java.util.regex.Pattern.sequence(Pattern.java:1798)
at java.util.regex.Pattern.expr(Pattern.java:1687)
at java.util.regex.Pattern.compile(Pattern.java:1397)
at java.util.regex.Pattern.<init>(Pattern.java:1124)
at java.util.regex.Pattern.compile(Pattern.java:840)
at ec.ext.NodesCollator.readSource(NodesCollator.java:298)
at ec.ext.NodesCollator.collate(NodesCollator.java:378)
at ec.ext.NodesCollator.collate(NodesCollator.java:348)
at ec.ext.ExtendedEvolutionState.collate(ExtendedEvolutionState.java:74)
at ec.ext.ExtendedEvolutionState.evolve(ExtendedEvolutionState.java:89)
at ec.Evolve.startFresh(Evolve.java:324)
at ec.Evolve.main(Evolve.java:452)
-
Non en fait l'expression est bien compilable mais elle ne donne aucun résultat!
-
Pattern p;
String s = "[A-Za-z0-9/;._:,=*()\\[\\]+-<>& ]+\\{[A-Za-z0-9/;._:,=*()\\[\\]+-<>&{} ]*\\}[A-Za-z0-9/;._:,=*()\\[\\]+-<>& ]*";
p = Pattern.compile(s);
if(p.matcher("fezfze{fezf;}efezf").matches())
{
System.out.println(true);
}
else
{
System.out.println(false);
}
// Voilà qui devrait marcher !! :wink:
-
Non en fait l'expression ne peut pas fonctionner car il reste un certain nombre de meta caractères dans ton expression typiquement les (), je vais rajouter quelques \\ et voir ce que ça donne.
Merci quand même ça m'a donné quelques idées.
-
-
Voici l'expression correcte: plus compacte et plus complète!
-
et si tu as du code avant tes accolades ouvrantes ou fermantes ? çà ne passe pas !!
-
Oui mais comme je place au bon endroit dans mon code avant de récupérer le corps d'une méthode ça n'a aucune importance!