Je crois que j'ai trouvé un bug bizarre les expressions régulières.
Normalement, les expressions suivantes devraient donner les mêmes résultats:
Z?x{2,}|C
(?:Z){0,1}x{2,}|C
(?:Z)?x{2,}|C
(En français, un Z optionnel suivi d'au moins 2 "x", ou bien un grand C.
Et bien, c'est vrai sous le JDK 1.5, mais avec le JDK 1.6.0_12-b04 sous Windows, la dernière expression n'est pas équivalente aux autres!!
Y'a un pro des regexp pour me dire si c'est mes yeux?
Un petit TestCase pour prouver ça: j'analyse la chaine "xxC", qui devrait donner "xx" puis "C"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class PatternBugTest extends TestCase { private void check(String s) { final Pattern p = Pattern.compile(s); final Matcher m = p.matcher("xxC"); final List<String> result = new ArrayList<String>(); while (m.find()) { result.add(m.group(0)); } assertEquals(Arrays.asList("xx", "C"), result); } public void testBugKO() { check("Z?x{2,}|C"); //Ok check("(?:Z){0,1}x{2,}|C"); //Ok check("(?:Z)?x{2,}|C"); //bug on JDK 1.6.0_12-b04 } }
Partager