java.util.regex.PatternSyntaxException:索引71附近的非法字符范围

时间:2017-05-25 11:08:14

标签: java regex

[^ \ u0009 \ u000A \ u000D \ u0020- \ uD7FF \ uE000- \ uFFFD \ uD800 \ uDC00- \ uDBFF \ uDFFF]

以上行显示非法字符范围异常。任何人都可以帮助我。

如果我直接在java代码中使用上面的行,则不显示任何错误。

Pattern xmlInvalidChars = Pattern.compile("[^\\u0009\\u000A\\u000D\\u0020-\\uD7FF\\uE000-\\uFFFD\uD800\uDC00-\uDBFF\uDFFF]");

但是如果从配置xml文件中获取字符串并在java代码中使用,则显示错误。

String chars = ConfigLoader.getInstance().getInvalidCharacters();
Pattern xmlInvalidChars = Pattern.compile(chars);

2 个答案:

答案 0 :(得分:1)

我还没有发表评论,所以我会发帖作为答案。在你的字符串中你有松散的反斜杠\uD800\uDC00-\uDBFF\uDFFF,因此,它将\u视为并转义字符,但事实并非如此。只需在正则表达式的其余部分添加双反斜杠。

编辑:在编译模式之前,尝试用双斜杠替换单斜杠。

chars = chars.replace("\\","\\\\");

答案 1 :(得分:0)

我在配置xml文件中使用了以下行。

 [^\\u0009\\u000A\\u000D\\u0020-\\uD7FF\\uE000-\\uFFFD\uD800\\uDC00-\\uDBFF\uDFFF]

这是我使用相反的情况。我将单斜杠更改为双斜杠(\ to \)并将双斜杠更改为单斜杠(\ to)。它现在正在运作。