0

我有一个字符串如下。

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

每当我遇到上述字符串时,我需要生成以下字符串。我的意思是我需要附加字符串“来自 Stream”,如下所示。

$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 中包含匹配的括号。类似于以下内容:

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

包括第一个开放括号在内的事情:.*?\\.Alarm\\(

任何内部括号之外的东西:[^\\(]*?

内部括号对:\\([^\\)]*?\\)

匹配括号外或括号对内的任意数量的东西:([^\\(]*?|\\([^\\)]*?\\))*

这个RegexPlanet网站是玩正则表达式的好地方,看看什么会起作用。

于 2012-04-11T11:35:31.133 回答