以下のような文字列があります。
$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && ( n>=2 || t<=4))) demo program
上記の文字列では、左右の括弧の数が条件に基づいて変更されます。
私の要件は、最後の右括弧に遭遇したときはいつでも、以下の文字列を連結する必要があるということです。
from "stream"
ということで、結果は下のようになります。
$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && ( n>=2 || t<=4))) from "stream" demo program
これを達成するために、Javaで次のコードを試しています。
Pattern pattern = Pattern.compile(".*?\\.Event\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");
if(line.matches(".*\\.Test(.*).*")){
line = pattern.matcher(line).replaceAll("$0 from \""+"stream"+"\""+" ");
}
ただし、左右の括弧の数が 5 を超える場合、上記のコードは機能しません。
目的の結果を達成するためのポインタが必要です。つまり、任意の数の左括弧と右括弧の一般的なソリューションが必要です。