我在下面的输入字符串中查找重复组。
目标:
一行必须有4个或更多[Key:value]对出现。(带矩形括号)
输入:
<2014/06/14-11:03:06.695>+Timer-11+INFO@TimeLogger.logTime: [Process Name : Nav Calculations] [Total Time : 7 ms][Wait Time : 0 ms][Execution Time : 7 ms].
段:
final Pattern p = Pattern.compile("(\\[.*?\\]){4,}");
final Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
使用上面的代码片段,匹配器无法找到匹配项。
但如果我将模式更改为"(\\[.*?\\]){3}")"
,则返回以下值。
[Process Name : Nav Calculations] [Total Time : 7 ms][Wait Time : 0 ms][Execution Time : 7 ms]
我还查看了之前关于正则表达式的其他帖子。但无法理解我在这里缺少什么。
为什么正则表达式"(\\[.*?\\]){4,}"
不起作用。我应该在这个正则表达式中改变什么才能达到我的目标
请从这里引导我。
答案 0 :(得分:2)
第一个找不到匹配,因为组之间有空格。
你有空位:
[Process Name : Nav Calculations] [Total Time : 7 ms][Wait Time : 0 ms][Execution Time : 7 ms]
^ space
因此,您无法一个接一个地匹配四组大括号。空间需要匹配。
修复正则表达式
另一方面,如果量化组中有可选空格,则可以匹配它:
(?:\[.*?\]\s*){4} // This works!
为什么(?:\[.*?\]){3}
匹配四个群组?
[Process Name : Nav Calculations] [Total Time : 7 ms]
[Wait Time : 0 ms]
[Wait Time : 0 ms][Execution Time : 7 ms]
<强>参考强>
以下文章可能会消除任何遗留问题。