以下のような文字列があります。
$Alarm:com.Alarm(a == 123 || (count == 12345 || (time matches "24" && pqr =="1")))
$Event:com.Event(b == 123 || (co == 12345 || (time matches "204" && pqr =="22")))
上記の文字列に遭遇するたびに、次の文字列を生成する必要があります。つまり、部分文字列と部分文字列の文字列を以下のように追加する必要"from AlarmStream"
が$Alarm:com.Alarm(...)
あり"from EventStream"
ます$Event:com.Event(...)
。
$Alarm:com.Alarm(a == 123 || (count == 12345 || (time matches "24" && pqr =="1") )) from AlarmStream
$Event:com.Event(b == 123 || (co == 12345 || (time matches "204" && pqr =="22"))) from EventStream
私は現在、Javaで同じことを達成するために次のパターンを使用しています。
Pattern alarmPattern = Pattern.compile(".*?\\.Alarm\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");
Pattern eventPattern = Pattern.compile(".*?\\.Event\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");
しかし、正しい出力が得られません。
正しい出力を達成するためのいくつかの指針を教えてください.正規表現は最後の括弧のみを考慮する必要があり、ここでは左括弧と右括弧のペアの数は固定されていません.増減する可能性があります.したがって、ロジックは任意の数の左括弧に対して機能するはずです.および右括弧のペア。