diff --git a/java/com/google/re2j/Parser.java b/java/com/google/re2j/Parser.java index 0e73e701..e83f8ccf 100644 --- a/java/com/google/re2j/Parser.java +++ b/java/com/google/re2j/Parser.java @@ -1344,7 +1344,7 @@ private static int parseEscape(StringIterator t) throws PatternSyntaxException { bigswitch: switch (c) { default: - if (!Utils.isalnum(c)) { + if (c <= Unicode.MAX_ASCII && !Utils.isalnum(c)) { // Escaped non-word characters are always themselves. // PCRE is not quite so rigorous: it accepts things like // \q, but we don't. We once rejected \_, but too many diff --git a/javatests/com/google/re2j/ParserTest.java b/javatests/com/google/re2j/ParserTest.java index a97b7599..39c9272f 100644 --- a/javatests/com/google/re2j/ParserTest.java +++ b/javatests/com/google/re2j/ParserTest.java @@ -551,6 +551,9 @@ private static String runesToString(int[] runes) { "(?bar)(?baz)", "\\x", // https://github.com/google/re2j/issues/103 "\\xv", // https://github.com/google/re2j/issues/103 + "^[a-z0-9\\–\\-'‘’]+$", + "[\\”\\“]\"", + "[\\<\\>\\{\\}\\[\\]\\|\\\”\\%\\~\\#]", }; private static final String[] ONLY_PERL = {