正则表达式匹配两个以上的元素Java

时间:2012-03-15 17:38:59

标签: java regex

我正在尝试匹配字符串中的两个或更多单词。字符串为My/word example/word我要提取My example。我到目前为止所做的是:

        String test = "My/word example/word";
        Pattern pattern = Pattern.compile("((.*)\\/word){2,}");
        Matcher match = pattern.matcher(test);
        if (match.find()) {

                System.out.println(match.group(1));
            }

但它只打印example/word,有任何想法吗?

4 个答案:

答案 0 :(得分:4)

如果您对捕获组有任何重复,它将仅捕获该组的最终匹配。这里你最好的选择是简化正则表达式只匹配一个单词,然后重复使用match.find(),直到找不到匹配项:

String test = "My/word example/word";
Pattern pattern = Pattern.compile("(\\w+)/word");
Matcher match = pattern.matcher(test);
while (match.find()) {
    System.out.println(match.group(1));
}

如果您找到两个或更多匹配项,那么在此处添加一些逻辑并不难打印。

另请注意,我修改了你的正则表达式,正斜杠不需要转义,我将.*替换为\w+这应该更好,因为你不会贪婪地匹配到最后/word

答案 1 :(得分:1)

您可以对/word部分使用被动组,并迭代匹配的结果以构建最终字符串。

String test = "My/word example/word";
Pattern pattern = Pattern.compile("(\\w*)(?:\\/word)");
Matcher match = pattern.matcher(test);
String result = "";
while (match.find()) {
    result += match.group(1) + " ";
}

System.out.println(result.trim());

输出将是:

My example

答案 2 :(得分:0)

您可以使用非贪婪的* -operator:

((.*?)\/word)

答案 3 :(得分:0)

您是否可能使用了错误的组号?我认为如果您使用group(2)

,它会返回您要查找的结果