否定复杂的正则表达式

时间:2017-03-22 09:05:19

标签: java regex math

我已经尝试了标准预测方法来否定我用于方程求解器的正则表达式。问题是它无法正常工作。

给出样本方程式: 1 + 2×3×4 +

我想隔离乘法的2个实例。我想在一个数组中使用{1 +,+},在另一个数组中使用{2x5,3x4}。

我使用split(“\\ d + x \\ d”)来获取第一个数组,但无法成功否定该正则表达式以获取另一个数组。感谢您的时间,任何帮助表示感谢!

1 个答案:

答案 0 :(得分:0)

我想不出一个会产生乘法项的单行程,但使用匹配器提取它们相当简单。

String input = "1+2x5+3x4";
// you already found a way to identify the non multiplication terms
String[] first = input.split("\\d+x\\d+");

String pattern = "(\\d+x\\d+)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
List<String> second = new ArrayList<>();
while (m.find()) {
    second.add(m.group(1));
    System.out.println(m.group(1));
}

请注意,通常您应该使用解析器来处理复杂的算术表达式。该解析器可能在内部大量使用正则表达式,但只要使用嵌套括号,单独使用正则表达式将无法正常工作。

<强>输出:

2x5
3x4