我有一个字符串如下。
$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 )
请给我一些指示,以实现正确的输出。正则表达式应该只考虑最后一个副词。
答案 0 :(得分:1)
您需要在模式中包含匹配的parens。如下所示:
Pattern eventPattern = Pattern.compile(".*?\\.Alarm\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");
包括第一个开放式问题在内的事情:.*?\\.Alarm\\(
任何内部事件之外的东西:[^\\(]*?
内部对子:\\([^\\)]*?\\)
在parens之外或在parens对中匹配任意数量的东西:([^\\(]*?|\\([^\\)]*?\\))*
这个RegexPlanet网站是一个与正则表达式配合使用的好地方,可以查看哪些内容有效。