killme2008 / aviatorscript

A high performance scripting language hosted on the JVM.
http://fnil.net/aviator/
4.44k stars 830 forks source link

表达式有\u等字符串编译报错 #602

Open carterrr opened 8 months ago

carterrr commented 8 months ago

问题

我想注册一个函数 来实现自定义的正则匹配逻辑,函数是这样的:

 /**
     * 正则匹配
     *
     * @param str 字符串
     * @param reg 正则表达式
     * @param allMatches 是否全文匹配
     * @return 是否匹配
     */
    public static boolean matchPattern(String str, String reg, boolean allMatches) {
        if (StringUtils.isAnyEmpty(str, reg)) {
            return false;
        }
        Matcher matcher = Pattern.compile(reg).matcher(str);
        if (allMatches) {
            return matcher.matches();
        } else {
            return matcher.find();
        }

    }

当使用aviator表达式编译时 正则中的一些转义会抛出不支持的异常 比如这个表达式

return matchPattern('很好',  '[\u4e00-\u9fa5]{0,4}'); // 0-4个中文字符

其中\u会被解析器抛出无法识别异常

思路

请教下:如果移除源码中的 throw逻辑 ,可能会有哪些影响呢 com/googlecode/aviator/lexer/ExpressionLexer.java:394

image
killme2008 commented 8 months ago

加个 \ 呢?