diff --git a/java/com/google/re2j/Parser.java b/java/com/google/re2j/Parser.java index 288f646e..c95e3918 100644 --- a/java/com/google/re2j/Parser.java +++ b/java/com/google/re2j/Parser.java @@ -550,7 +550,9 @@ && isCharClass(first.subs[0])))) { for (int j = start + 1; j < i; j++) { Regexp subMax = array[s + max], subJ = array[s + j]; if (subMax.op.ordinal() < subJ.op.ordinal() - || (subMax.op == subJ.op && subMax.runes.length < subJ.runes.length)) { + || (subMax.op == subJ.op + && (subMax.runes != null ? subMax.runes.length : 0) + < (subJ.runes != null ? subJ.runes.length : 0))) { max = j; } } @@ -782,7 +784,7 @@ public String toString() { } /** - * Parse regular expression pattern {@var pattern} with mode flags {@var flags}. + * Parse regular expression pattern {@code pattern} with mode flags {@code flags}. */ static Regexp parse(String pattern, int flags) throws PatternSyntaxException { return new Parser(pattern, flags).parseInternal(); diff --git a/javatests/com/google/re2j/RE2CompileTest.java b/javatests/com/google/re2j/RE2CompileTest.java index c9e5f391..0ac6294d 100644 --- a/javatests/com/google/re2j/RE2CompileTest.java +++ b/javatests/com/google/re2j/RE2CompileTest.java @@ -36,6 +36,7 @@ public static String[][] testData() { {"[abc]", null}, {"[^1234]", null}, {"[^\n]", null}, + {"..|.#|..", null}, {"\\!\\\\", null}, {"abc]", null}, // Matches the closing bracket literally. {"a??", null},