我有一个如下的字符串。
$Alarm:com.Alarm(a == 123 || (count == 12345 , time matches "24"))
每当我遇到上面的字符串时,我需要生成以下字符串。我的意思是我需要附加字符串“from 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 )
请为我提供一些指导以实现正确的输出。正则表达式应仅考虑最后一个括号。
最佳答案
您需要在模式中包含括号匹配。类似于以下内容:
Pattern eventPattern = Pattern.compile(".*?\\.Alarm\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");
直到并包括第一个左括号:.*?\\.Alarm\\(
任何内部括号之外的内容:[^\\(]*?
内部括号对:\\([^\\)]*?\\)
匹配括号外或括号对内的任意数量的内容:([^\\(]*?|\\([^\\)]*?\\))*
这个RegexPlanet网站是一个使用正则表达式来看看什么会起作用的好地方。
关于java - 使用 Pattern java 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10104862/