Bonjour,
j'ai une expression régulière qui lève une exception lorsque le texte source dépasse un certain nombre de caractère.
Il s'agit d'une StackOverflowError, sans numéro de ligne et sans explication claire.
Je ne comprend pas pourquoi cette erreur apparaît, peut-être avez vous une idée...
pour l'exemple je remplis txt avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Pattern pattern = Pattern.compile("<BLOC>(\\s|.)*</BLOC>"); StringBuffer txt = new StringBuffer(); txt.append("<BLOC>"); // exception avec i > 800 for (int i=0; i<801; i++) txt.append("a"); txt.append("</BLOC>"); Matcher m = pattern.matcher(txt); if (m.find(0)) { // Exception in thread "main" java.lang.StackOverflowError System.out.println("find"); }L'exception est la suivante :<BLOC>aaaaaaaa...</BLOC>ça fonctionne avec 800 caratères mais pas plus.Exception in thread "main" java.lang.StackOverflowError
at java.util.regex.Pattern$Loop.match(Unknown Source)
at java.util.regex.Pattern$GroupTail.match(Unknown Source)
at java.util.regex.Pattern$Dot.match(Unknown Source)
at java.util.regex.Pattern$Branch.match(Unknown Source)
at java.util.regex.Pattern$GroupHead.match(Unknown Source)
at java.util.regex.Pattern$Loop.match(Unknown Source)
...ça recommence sur plusieurs dizaines de lignes
Au passage cette expression n'est pas de moi et je connais pas la raison du (\\s|.)* dans le pattern plutôt que .*
Avec .* ça fonctionne sans problème, mais je voudrais tout de même bien comprendre cette l'origine de cette exception.
Partager