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

标签 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,有什么想法吗?

最佳答案

如果您对捕获组有任何重复,它只会捕获该组的最终匹配。这里最好的选择是将正则表达式简化为仅匹配一个单词,然后重复使用 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

关于java - 正则表达式匹配两个以上元素Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9725155/

相关文章:

Java Graphics.drawString 并不总是有效

java - 从java访问xml字符串

java - 覆盖方法 - 类变量

java - Struts 1 在使用 Multipart/Form-Data Enctype 进行表单验证失败后丢失请求参数

java - 人口随时间变化

javascript - 正则表达式无法在 JavaScript 函数中工作 - 为什么?

.net - 正则表达式先行仅删除最后一个字符

python - 从元素列表中提取匹配的数字

php - 从 url 获取域及其子域

php - Windows 上的 Apache/PHP 因正则表达式而崩溃