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
	}
 
}