多项式表达式的正则表达式

Regex for polynomial expression

我有一个字符串,我希望它是一个多项式表达式,类似于 "2x^2-3x+1。我想使用正则表达式对表达式中的每个术语进行分组。我目前有 "^(-?\d?x(\^\d)?)+"。我正在尝试捕获一个术语作为可选的减号,然后是一个数字,然后是 x,然后是一个可选的指数,它应该是“^someNumber”的形式。因此,对于我上面的多项式,我希望第 1 组为 "2x^2",第 2 组为 "-3x",第 3 组为 "+1"。首先,如果我有 (someGroupExpression)+,这会为出现的每个 someGroupExpression 生成一个组吗?其次,对于指数部分,我不想让它成为一个嵌套组,因为这会使遍历术语组很麻烦。如何指定指数部分应遵循的规则而不使其成为一个组?如果我能澄清这个问题,请告诉我。

要捕获未嵌套或重叠的组中的每个子表达式,请使用以下正则表达式。

正则表达式: ([+-]?[^-+]+)

解释:它会捕获whole的每一个子表达式而不重叠每个匹配。

Java代码

String exp = "2x^3+4x^2+5x-42";
Pattern pattern = Pattern.compile("([+-]?[^-+]+)");
Matcher matcher = pattern.matcher(exp);
int x=0;
while (matcher.find()) {
    x=x+1;
    System.out.println("Group "+x+": " + matcher.group(1));
}

Regex101 demo

Ideone Demo


考虑所有子表达式的更健壮的正则表达式是:

正则表达式: ([+-]?(?:(?:\d+x\^\d+)|(?:\d+x)|(?:\d+)|(?:x)))

在Java中使用\进行双重转义。 \d会变成\d\^会变成\^

Regex101 Demo

Ideone Demo