FULL PRODUCT VERSION : java version "1.6.0_02" Java(TM) SE Runtime Environment (build 1.6.0_02-b06) Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode, sharing) ADDITIONAL OS VERSION INFORMATION : Microsoft Windows XP [Version 5.1.2600] A DESCRIPTION OF THE PROBLEM : The following examples is OK. System.out.println("\uD834\uDD22".matches("[\\uD834\\uDD21-\uD834\uDD24]+")); but, the following examples, PatternSyntaxException is generated. System.out.println("\uD834\uDD21".matches("[\\uD834\\uDD21-\\uD834\\uDD22]+")); STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Compile and run the following. import java.util.regex.Pattern; public class Sample { // U+1D121 is \uD834\uDD21 public static void main(String[] args) { System.out.println("\uD834\uDD22".matches("[\\uD834\\uDD21-\uD834\uDD24]+")); System.out.println("\uD834\uDD21".matches("[\\uD834\\uDD21-\uD834\uDD22]+")); } } EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - true true ACTUAL - true Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 19 [\uD834\uDD21-\uD834\uDD22]+ ^ at java.util.regex.Pattern.error(Unknown Source) at java.util.regex.Pattern.range(Unknown Source) at java.util.regex.Pattern.clazz(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.util.regex.Pattern.<init>(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.util.regex.Pattern.matches(Unknown Source) at java.lang.String.matches(Unknown Source) at Sample.main(Sample.java:10) REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- import java.util.regex.Pattern; public class Sample { // U+1D121 is \uD834\uDD21 public static void main(String[] args) { System.out.println("\uD834\uDD22".matches("[\\uD834\\uDD21-\uD834\uDD24]+")); System.out.println("\uD834\uDD21".matches("[\\uD834\\uDD21-\uD834\uDD22]+")); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : The upper example shows.
|