Мне нужно идентифицировать выражение верхнего уровня из заданной строки и преобразовать его в левый операнд, правый операнд и оператор в groovy.
Я создал массив соответствия для выражения и логики c выглядит следующим образом
static CONDITION_REGEXPS = [
'(.+) (==) (.+)',
'(.+) (!=) (.+)',
'(.+) (>) (.+)',
'(.+) (>=) (.+)',
'(.+) (<) (.+)',
'(.+) (<=) (.+)'
]
static fromString(def string) {
if (string) {
string = string.split('\\|\\|');
List<List> list = string.collect({
it.trim().replaceAll(/^\(|\)$/, '').split('&&').collect({ condition ->
condition = condition.trim()
def regex = CONDITION_REGEXPS.find({ condition.matches(it) })
if (regex) {
return [leftOperand: condition.replaceFirst(regex, '$1'), operator: condition.replaceFirst(regex, '$2'), rightOperand: condition.replaceFirst(regex, '$3')]
}
})
})
return list
} else {
return []
}
}
Теперь я передаю строку в следующую функцию,
def str = '( ${a < b ? a : b} < ${a > b ? a : b} )'
println fromString(str);
, которая дала мне неправильный результат,
leftOperand: ${a < b ? a : b} < ${a
operator: >
rightOperand: b ? a : b}
Что не так , должно быть,
leftOperand: ${a < b ? a : b}
operator: <
rightOperand: ${a > b ? a : b}
Любая помощь будет оценена