在 java 中将 (a+b)*3+7 替换为 (aplusb)*3+7?

replace (a+b)*3+7 by (aplusb)*3+7 in java?

我认为问题在标题中,

我已经用这个正则表达式 \((.*?)\) 尝试了匹配器和模式,但它让我得到的只是括号之间的字符串,没有 *3 ,

我怎样才能改变这个:(a+b)*3+7 为此:(aplusb)*3+7

我尝试了全部替换,但它也替换了括号外的“+”,我明白了 (aplusb)*3plus7 但我想像我说的那样替换它:(aplusb)*3+7

我试了很多方法才问,所以请帮助我 谢谢你的帮助,对不起我的英语不好:)

使用下面的正则表达式,然后将匹配的符号 + 替换为 plus 。由于 + 是正则表达式元字符,您需要将其转义以匹配文字 + 符号。

\+(?=[^()]*\))

以上正则表达式匹配符号 + 仅当其后跟

  • [^()]* 任何字符但不属于 () 零次或多次。

  • \) 后面跟着一个右括号。

  • (?=...) 调用了 positive lookahead assertion 断言匹配是否会发生。这不会消耗任何字符。

DEMO

System.out.println("(a+b)*3+7".replaceAll("\+(?=[^()]*\))", "plus"));

输出:

(aplusb)*3+7

为什么不使用 String.replaceFirst()

public class Main {

    public static void main(String[] args) {

        String s="(a+b)*3+7";
        System.out.println(s.replaceFirst("\+","plus"));

    }
}

结果:(aplusb)*3+7