完整正则表达式匹配的返回值(多重模式)

时间:2016-10-17 07:57:43

标签: java regex

我目前正在处理日志,需要从中提取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

有可能吗?

1 个答案:

答案 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

请注意,还有其他组。最好为您的群组命名。也有人可能会有一个更好的正则表达式,特别是如果你可以做一些真正的输入。