在以下输入字符串中查找重复组时,我有查询。
目标:
一行必须有4个或更多的键:值对。(带矩形大括号)
输入:
<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]我还浏览了以前关于regex的其他帖子。但我不明白我在这里错过了什么。
为什么正则表达式"(\\[.*?\\]){4,}"不能工作。为了达到我的目标,我应该在这个正则表达式中修改什么?
请在这里指引我。
发布于 2014-06-14 05:32:12
第一个组无法找到匹配项,因为组之间有一个空格。
你这里有个地方:
[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]参考
下面这篇文章可能会消除任何剩余的混乱。
许多程度的Regex贪婪
https://stackoverflow.com/questions/24216859
复制相似问题