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



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

上面的行显示了非法字符范围异常。谁能帮帮我。

如果我直接在 Java 代码中使用上述行,它不会显示任何错误。

Pattern xmlInvalidChars = Pattern.compile("[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFDuD800uDC00-uDBFFuDFFF]");

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

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

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


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

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

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

 [^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFDuD800\uDC00-\uDBFFuDFFF]
也就是说,我使用了相反的情况。 我将单斜杠更改为双斜杠(\ 到 \(,将双斜杠

更改为单斜杠(\ 到 (。它现在正在工作。

最新更新