使用模式java的正则表达式

时间:2012-04-11 11:18:59

标签: java regex

我有一个字符串如下。

$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 )

请给我一些指示,以实现正确的输出。正则表达式应该只考虑最后一个副词。

1 个答案:

答案 0 :(得分:1)

您需要在模式中包含匹配的parens。如下所示:

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

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

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

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

在parens之外或在parens对中匹配任意数量的东西:([^\\(]*?|\\([^\\)]*?\\))*

这个RegexPlanet网站是一个与正则表达式配合使用的好地方,可以查看哪些内容有效。