private static void test(String s) {
        String regex = fromZookeeper();// 从zookeeper实时获取正则表达式
        Pattern pattern = Pattern.compile(regex);
        Matcher emojiMatcher = pattern.matcher(s);
    }

当从zookeeper中实时获取正则表达式使用时,会提示转义异常,如下

java.util.regex.PatternSyntaxException: Unclosed character class near index 57
[^a-zA-Z0-9一-龥~ `!@#$%^&*()-=_+[]{}|\:;"'<>,.,。、??/“”‘’#:]

解决方案:只要将正则表达式中的特殊字符加上转义符号(//)即可,但处理起来很麻烦。

Pattern类有提供一个方法来处理未转义的字符 :java.util.regex.Pattern#quote,测试是有效的。代码如下

    private static void test(String s) {
        String regex = fromZookeeper();// 从zookeeper实时获取正则表达式
        Pattern pattern = Pattern.compile(Pattern.quote(regex));// 将未转义的特殊字符转义
        Matcher emojiMatcher = pattern.matcher(s);
    }

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐