Java中提取关键文本的核心是:先明确目标并编写含捕获组的正则表达式,再用Pattern.compile编译复用,通过matcher.find()循环匹配,最后用group(1)等安全获取捕获内容。

Java 中用 Pattern 和 Matcher 提取关键文本,核心是写对正则表达式、调用 find() 循环匹配、再用 group() 拿到捕获内容。
明确你要提取的“关键文本”是什么
先想清楚目标:是提取所有数字?邮箱?括号里的内容?还是某个固定前缀后的字符串?比如从 "订单号:ORD12345,状态:已完成" 中提取 "ORD12345",正则就得聚焦在“订单号:”后面那一段。
- 如果要提取连续数字,可用
\d+ - 如果要提取英文单词,可用
[a-zA-Z]+ - 如果要提取冒号后、逗号前的内容,可用
:([^,]+)(注意中文标点) - 推荐用小括号
()包裹想提取的部分,形成“捕获组”,后续用group(1)直接获取
用 Pattern.compile 编译正则,再创建 Matcher
别每次匹配都重新编译,Pattern 是线程安全且可复用的。把正则字符串交给 Pattern.compile() 得到 pattern 对象,再用它对目标字符串生成 Matcher:
String text = "价格:¥299.50,库存:12件";
Pattern pattern = Pattern.compile("价格:¥(\d+\.\d+)"); // 捕获金额
Matcher matcher = pattern.matcher(text);
注意:如果正则含特殊字符(如点、括号、问号),记得转义;中文字符一般不用转义,但标点要核对是否和原文一致(全角/半角)。
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
用 find() + group() 逐个提取匹配结果
matcher.find() 会从左到右扫描,每次成功就停在当前匹配位置,配合 group() 取值:
-
matcher.group()或matcher.group(0):返回整个匹配串 -
matcher.group(1):返回第一个()里的内容(即第一个捕获组) - 有多个括号时,按左括号出现顺序编号,
group(2)是第二个 - 用
while (matcher.find())可提取全部匹配项(适合一个字符串含多处目标)
示例:
List<String> prices = new ArrayList<>();
while (matcher.find()) {
prices.add(matcher.group(1)); // 提取 ¥ 后的数字字符串
}
// 结果:["299.50"]
处理没匹配到或 group 越界的情况
find() 返回 false 表示没找到,此时调用 group() 会抛 IllegalStateException。所以务必先判断再取值:
if (matcher.find()) {
String result = matcher.group(1); // 安全
} else {
System.out.println("未找到匹配内容");
}
另外,group(1) 要求正则里真有第一个捕获组;如果写了 (\d+) 却调用 group(2),会抛 IndexOutOfBoundsException。

















