aviatorscript icon indicating copy to clipboard operation
aviatorscript copied to clipboard

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

Open carterrr opened this issue 2 years ago • 1 comments

问题

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

 /**
     * 正则匹配
     *
     * @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

carterrr avatar Dec 27 '23 09:12 carterrr

加个 \ 呢?

killme2008 avatar Dec 27 '23 12:12 killme2008