-
Bug
-
Resolution: Fixed
-
P4
-
8, 9
-
b122
-
generic
-
generic
-
Verified
FULL PRODUCT VERSION :
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+120)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+120, mixed mode)
A DESCRIPTION OF THE PROBLEM :
The regular expression UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression.
Running the program above produces the following exception.
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 3
(?-U)
^
at java.util.regex.Pattern.error(java.base@9-ea/Pattern.java:1990)
at java.util.regex.Pattern.group0(java.base@9-ea/Pattern.java:3014)
at java.util.regex.Pattern.sequence(java.base@9-ea/Pattern.java:2086)
at java.util.regex.Pattern.expr(java.base@9-ea/Pattern.java:2031)
at java.util.regex.Pattern.compile(java.base@9-ea/Pattern.java:1753)
at java.util.regex.Pattern.<init>(java.base@9-ea/Pattern.java:1402)
at java.util.regex.Pattern.compile(java.base@9-ea/Pattern.java:1070)
at EmbeddedFlag.main(EmbeddedFlag.java:8)
I expected the exception not be thrown and the program to complete without problems.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run the example program.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Program outputs true.
ACTUAL -
An exception is thrown.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 9
(?U)\w(?-U)\w
^
at java.util.regex.Pattern.error(java.base@9-ea/Pattern.java:1990)
at java.util.regex.Pattern.group0(java.base@9-ea/Pattern.java:3014)
at java.util.regex.Pattern.sequence(java.base@9-ea/Pattern.java:2086)
at java.util.regex.Pattern.expr(java.base@9-ea/Pattern.java:2031)
at java.util.regex.Pattern.compile(java.base@9-ea/Pattern.java:1753)
at java.util.regex.Pattern.<init>(java.base@9-ea/Pattern.java:1402)
at java.util.regex.Pattern.compile(java.base@9-ea/Pattern.java:1070)
at EmbeddedFlag.main(EmbeddedFlag.java:8)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.regex.Pattern;
class EmbeddedFlag {
public static void main(String[] args) {
final Pattern pattern = Pattern.compile("(?U)\\w(?-U)\\w");
System.out.println(!pattern.matcher("üü").matches());
}
}
---------- END SOURCE ----------
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+120)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+120, mixed mode)
A DESCRIPTION OF THE PROBLEM :
The regular expression UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression.
Running the program above produces the following exception.
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 3
(?-U)
^
at java.util.regex.Pattern.error(java.base@9-ea/Pattern.java:1990)
at java.util.regex.Pattern.group0(java.base@9-ea/Pattern.java:3014)
at java.util.regex.Pattern.sequence(java.base@9-ea/Pattern.java:2086)
at java.util.regex.Pattern.expr(java.base@9-ea/Pattern.java:2031)
at java.util.regex.Pattern.compile(java.base@9-ea/Pattern.java:1753)
at java.util.regex.Pattern.<init>(java.base@9-ea/Pattern.java:1402)
at java.util.regex.Pattern.compile(java.base@9-ea/Pattern.java:1070)
at EmbeddedFlag.main(EmbeddedFlag.java:8)
I expected the exception not be thrown and the program to complete without problems.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run the example program.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Program outputs true.
ACTUAL -
An exception is thrown.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 9
(?U)\w(?-U)\w
^
at java.util.regex.Pattern.error(java.base@9-ea/Pattern.java:1990)
at java.util.regex.Pattern.group0(java.base@9-ea/Pattern.java:3014)
at java.util.regex.Pattern.sequence(java.base@9-ea/Pattern.java:2086)
at java.util.regex.Pattern.expr(java.base@9-ea/Pattern.java:2031)
at java.util.regex.Pattern.compile(java.base@9-ea/Pattern.java:1753)
at java.util.regex.Pattern.<init>(java.base@9-ea/Pattern.java:1402)
at java.util.regex.Pattern.compile(java.base@9-ea/Pattern.java:1070)
at EmbeddedFlag.main(EmbeddedFlag.java:8)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.regex.Pattern;
class EmbeddedFlag {
public static void main(String[] args) {
final Pattern pattern = Pattern.compile("(?U)\\w(?-U)\\w");
System.out.println(!pattern.matcher("üü").matches());
}
}
---------- END SOURCE ----------