关于java中的正则表达式

use*_*653 0 java regex

我有一个字符串如下.

   $x:Test( (x==5 || y==4) && ( (r==9 || t==10) && ( n>=2 || t<=4))) demo program 
Run Code Online (Sandbox Code Playgroud)

在上面的字符串中,左右拐杖的数量将根据条件而改变.

我的要求是每当我遇到最后一个右边的paranthesis然后需要连接下面的字符串.

 from "stream"
Run Code Online (Sandbox Code Playgroud)

所以结果如下.

$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && ( n>=2 || t<=4))) from "stream" demo program 
Run Code Online (Sandbox Code Playgroud)

为了实现这一点,我尝试使用java中的以下代码.

Pattern pattern = Pattern.compile(".*?\\.Event\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");

if(line.matches(".*\\.Test(.*).*")){
    line = pattern.matcher(line).replaceAll("$0 from  \""+"stream"+"\""+" ");                 
}
Run Code Online (Sandbox Code Playgroud)

但是如果左右限制的数量超过5,则上述代码不起作用.

需要指点来实现所需的结果我的意思是我需要任意数量的左右分支的通用解决方案.

Roh*_*ain 5

你为什么要用Regex做这件事?只需使用简单的String类方法 - String#lastIndexOfString#substring解决问题: -

String str = "$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && " + 
             "( n>=2 || t<=4))) demo program";

int index = str.lastIndexOf(")");
str = str.substring(0, index + 1) + " from \"stream\"" + 
      str.substring(index + 1);
Run Code Online (Sandbox Code Playgroud)

Regexp 是一种非常强大的语言,但实际上不需要这样的语言,你可以确定在哪里需要拆分字符串.