从 SpEL 中提取变量

Extracting variables from SpEL

我需要知道表达式中的所有变量。

考虑以下代码片段,

ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = new StandardEvaluationContext();
context.setVariable("a", true);
context.setVariable("b", true);
context.setVariable("c", true);
boolean result = (Boolean) parser.parseExpression("#a AND (#b OR #c)").getValue(context);

SpEL 是否具有获取表达式中所有变量的功能?基本上,我需要这样的东西,

List<String> allVariables = parser.parseExpression("#a AND (#b OR #c)").getVariables();
// allVariables -> ["#a", "#b", "#c"]

我的用例是我正在从数据存储中读取这些表达式,并且需要确认表达式中的所有变量是否都有效。

提前致谢!!

我最终编写了一个从表达式中提取所有规则的正则表达式。

public List<String> extractRulesFromExpression(String ruleExpression) {
    List<String> listOfRules = new ArrayList<>();
    // This pattern extracts all string starting with "#" from the ruleExpression.
    Pattern pattern = Pattern.compile("#([a-zA-Z0-9_\-]*)[\s]?|#([a-zA-Z0-9_\-]*)$");
    Matcher matcher = pattern.matcher(ruleExpression);
    while (matcher.find()) {
      String rule = matcher.group().trim().substring(1);
      listOfRules.add(rule);
    }

    return listOfRules;
}

我知道这可能不是一个理想的解决方案或我正在寻找的东西,但它解决了我的用例。