从 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;
}
我知道这可能不是一个理想的解决方案或我正在寻找的东西,但它解决了我的用例。
我需要知道表达式中的所有变量。
考虑以下代码片段,
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;
}
我知道这可能不是一个理想的解决方案或我正在寻找的东西,但它解决了我的用例。