You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java正则匹配两个指定单词间长度≥5的单词仅匹配首个的原因是什么?

正则仅匹配到第一个符合要求单词的原因
  • 你的正则表达式中仅定义了1个用于捕获长度≥5单词的分组(\b[\w]{5,}\b),单次匹配下只会捕获一次符合规则的内容
  • 正则中的.*、.+均为贪婪匹配模式,会尽可能多的吞噬字符,直接跳过中间其余符合长度要求的单词,仅会保留第一个(或最后一个,取决于贪婪匹配的吞吃范围)符合要求的单词
  • 未开启全局匹配模式,正则完成一次完整匹配(从开头匹配到there的位置)后就会终止搜索,不会继续查找其余符合条件的单词
正确实现方案

你需要分两步完成匹配需求:

  1. 先提取出here和there两个分界词之间的全部内容
  2. 对提取出的中间内容做全局正则匹配,遍历拿到所有长度≥5的单词

Java代码示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatchWordBetween {
    public static void main(String[] args) {
        String sourceStr = "java regex String chain = start here christian call me water next time by facebook there too";
        // 用零宽断言提取here和there中间的内容,不包含分界词本身
        Pattern betweenPtn = Pattern.compile("(?<=\\bhere\\b).*(?=\\bthere\\b)");
        Matcher betweenMatcher = betweenPtn.matcher(sourceStr);
        if (betweenMatcher.find()) {
            String midContent = betweenMatcher.group();
            // 匹配所有长度≥5的单词,开启全局遍历
            Pattern wordPtn = Pattern.compile("\\b\\w{5,}\\b");
            Matcher wordMatcher = wordPtn.matcher(midContent);
            while (wordMatcher.find()) {
                System.out.println(wordMatcher.group());
            }
        }
    }
}

输出结果

christian
water
facebook

内容的提问来源于stack exchange,提问作者watercold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:48:03