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

なぜここで正規表現が必要なのですか。このタイプのコードでも問題なく動作するはずです。

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

Similar to previous solutions:

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