0

以下のような文字列があります。

$Alarm:com.Alarm(a  ==  123 || (count  ==  12345 , time  matches  "24"))

上記の文字列に遭遇するたびに、次の文字列を生成する必要があります。つまり、以下のように「ストリームから」という文字列を追加する必要があります。

$Alarm:com.Alarm(a  ==  123 || (count  ==  12345 , time  matches  "24")) from Stream.

私は現在、Javaで同じことを達成するために次のパターンを使用しています。

Pattern eventPattern = Pattern.compile(".*?\\.Alarm\\(.*?\\)");

しかし、私は次の出力を得ています。

$Alarm:com.Alarm(a  ==  123 || (count  ==  12345 , time  matches  "24") from Stream )

正しい出力を達成するための指針をいくつか教えてください。正規表現では、最後の括弧のみを考慮する必要があります。

4

1 に答える 1

1

パターンに一致する括弧を含める必要があります。次のようなもの:

Pattern eventPattern = Pattern.compile(".*?\\.Alarm\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");

最初の開き括弧までのこと:.*?\\.Alarm\\(

内部括弧の外側のもの:[^\\(]*?

内部括弧のペア:\\([^\\)]*?\\)

括弧の外側または括弧のペア内の任意の数の要素に一致します。([^\\(]*?|\\([^\\)]*?\\))*

このRegexPlanetサイトは、正規表現を試して何が機能するかを確認するのに最適な場所です。

于 2012-04-11T11:35:31.133 に答える