Java 要替换“负左括号”的正则表达式

Java 要替换“负左括号”的正则表达式,java,regex,Java,Regex,我有一个由一个相当混乱的数学表达式组成的字符串 字符串exp=8+--74/2--34+2*19 为了成功解析字符串并对其求值,我需要将每个负左括号替换为,比如!,结果是:8+-74/2-!!34+2*19 若要限定为负括号/表达式,括号前面的减号前面必须有运算符、行首或另一个左括号 到目前为止,我已经想出了这个 exp=exp.replaceAll[-+/*^]| ^-\,$1 …给我这个:8+-74/2-!-34+2*19. 除此之外,我已经尝试了几乎所有的方法。您可以将捕获组转变为积极的回

我有一个由一个相当混乱的数学表达式组成的字符串

字符串exp=8+--74/2--34+2*19

为了成功解析字符串并对其求值,我需要将每个负左括号替换为,比如!,结果是:8+-74/2-!!34+2*19

若要限定为负括号/表达式,括号前面的减号前面必须有运算符、行首或另一个左括号

到目前为止,我已经想出了这个

exp=exp.replaceAll[-+/*^]| ^-\,$1


…给我这个:8+-74/2-!-34+2*19. 除此之外,我已经尝试了几乎所有的方法。

您可以将捕获组转变为积极的回头客:

(?<=[-+/*^(]|^)-\\(
取而代之的是


问题是,此捕获组正在使用一个角色,您需要该角色来标识要匹配的所需部分。使用正向查找不会消耗匹配项,因此,您也不再需要替换中的$1。

这不是解析数学表达式的真正方式。有更好的方法,例如调车场或优先攀登。是的,我实际上使用调车场算法!这只是为了对字符串进行预格式化以简化解析。这就成功了。我想我需要看看那些落后和落后的人: