1

我有一个字符串如下。

    $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\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");

但我没有得到正确的输出。

请为我提供一些指示以实现正确的输出。正则表达式应该只考虑最后一个括号,这里左右括号对的数量不固定。它可能会增加或减少。所以逻辑应该适用于任意数量的左括号和右括号对。

4

2 回答 2

2

为什么在这里需要 RegEx。我认为即使是这种类型的 fo 代码也应该适合您:

if (str.startsWith("$Alarm:com.Alarm"))
    str = str + " from AlarmStream";
else if (str.startsWith("$Event:com.Event"))
    str = str + " from EventStream";
于 2012-10-31T09:44:21.497 回答
0

与以前的解决方案类似:

str += str.startsWith("$Alarm:com.Alarm")?" from AlarmStream":str.startsWith("$Event:com.Event")?" from EventStream":"";
于 2012-10-31T09:55:19.837 回答