我目前正在处理日志,需要从中提取Pattern。
我发现我可以使用|
运算符连接多个模式。
快速举例: 模式1:树 模式2:显示
String pattern = "Key\\s=\\s<[a-zA-Z0-9]*>|\\[something\\s\\]*";
Pattern.compile(pattern)
如果字符串匹配模式,我只想得到结果。
用
while (matcher.find()) {
foundValue = matcher.group(0);
}
我得到的结果是所有团体。所以有些单树,有些单一的Show,然后有些结果都存在。(甚至有些空白?!)
输出:
[something ]
"heres a blank line why"
key = dataIwantToo
你怎么看我得到我的模式,但它们被分成多个行。我想要的是整个结果。 例如:
[something ] key = dataIwantToo
有可能吗?
答案 0 :(得分:0)
您应该查看Matcher#group
Pattern p = Pattern.compile("(tree)|(bush)");
String test = "These are trees and bushes or even the rare treebush";
Matcher m = p.matcher(test);
while(m.find()){
System.out.println(m.group(0));
System.out.println(m.group(1));
System.out.println(m.group(2));
}
这个输出是:
tree
tree
null
bush
null
bush
tree
tree
null
bush
null
bush
要让匹配器匹配,你需要一个不同的正则表达式。例如
Pattern p = Pattern.compile("(tree(bush)?+)|(bush)");
String test = "These are trees and bushes or even the rare treebush";
Matcher m = p.matcher(test);
System.out.println(" 0 \t 1 \t 2 \t 3 \t");
while(m.find()){
System.out.println(m.group(0) + "\t"
+ m.group(1) + "\t"
+ m.group(2) + "\t"
+ m.group(3)
);
}
输出结果为:
0 1 2 3
tree tree null null
bush null null bush
treebush treebush bush null
请注意,还有其他组。最好为您的群组命名。也有人可能会有一个更好的正则表达式,特别是如果你可以做一些真正的输入。