一文详解Java正则表达式中的边界匹配器

 更新时间:2026年06月26日 09:22:10   作者:yaoxin521123  
本文介绍了Java正则表达式中的边界匹配器(Boundary Matchers),用于精确控制匹配位置,主要边界匹配符包括:^(行首)、$(行尾)、\b(单词边界)、\B(非单词边界)、\A(输入开始)、\G(上一匹配结束位置)等,需要的朋友可以参考下

在前面,我们主要关心的是:某个字符串中有没有匹配成功。但是,有时候我们还想知道:
👉 它是不是出现在行首?
👉 是不是在单词的结尾?
👉 或者是不是紧跟在上一次匹配的后面?

这些都可以通过 边界匹配器(Boundary Matchers) 来精确控制。

常见的边界匹配符

边界构造符描述
^一行的开始
$一行的结束
\b单词边界(word boundary)
\B非单词边界
\A输入的开始(整个文本,不受多行模式影响)
\G上一个匹配的结束位置
\Z输入的结束(忽略最后的换行符)
\z输入的真正结束(包含换行符)

举例说明

1.^和$:匹配行首和行尾

Pattern p = Pattern.compile("^dog$");
Matcher m = p.matcher("dog");

✅ 输出:匹配成功,因为整个字符串就是 dog

但如果前面多了空格呢?

Pattern p = Pattern.compile("^dog$");
Matcher m = p.matcher("   dog");

❌ 不匹配,因为前面多了空格,^ 要求必须是行首。

那我们允许空格呢?

Pattern p = Pattern.compile("^\\s*dog$");
Matcher m = p.matcher("      dog");

✅ 匹配成功,\s* 表示前面可以有任意多个空格。

2.\b:单词边界

单词边界的意思是:匹配的单词必须是完整的,而不是单词中的一部分

Pattern p = Pattern.compile("\\bdog\\b");
Matcher m = p.matcher("The dog plays in the yard.");

✅ 匹配成功,因为 dog 独立存在。

Pattern p = Pattern.compile("\\bdog\\b");
Matcher m = p.matcher("The doggie plays in the yard.");

❌ 不匹配,因为 dogdoggie 的一部分,不是完整单词。

3.\B:非单词边界

\b 相反,要求匹配的部分 不能 在单词的边界上。

Pattern p = Pattern.compile("\\bdog\\B");
Matcher m = p.matcher("The doggie plays in the yard.");

✅ 匹配成功,这里 dog 出现在 doggie 的开头,不是独立的单词。

Pattern p = Pattern.compile("\\bdog\\B");
Matcher m = p.matcher("The dog plays in the yard.");

❌ 不匹配,因为 dog 是一个完整单词。

4.\G:上一个匹配的结束位置

\G 可以用来 连续匹配,要求新匹配必须紧跟上一个。

Pattern p1 = Pattern.compile("dog");
Matcher m1 = p1.matcher("dog dog");

✅ 会找到两个结果:dog(0-3) 和 dog(4-7)。

但如果我们用 \G

Pattern p2 = Pattern.compile("\\Gdog");
Matcher m2 = p2.matcher("dog dog");

✅ 只找到第一个,因为第二个 dog 并不是紧挨着第一个结果。

这种情况常用于逐步扫描,比如日志分析。

实际应用场景

  1. 行首/行尾校验
    • 验证输入是不是只包含某个单词:^yes$
    • 检查某一行是不是以分号结尾:;$
  2. 单词搜索
    • 搜索文档中独立出现的 “cat”:\bcat\b,避免误匹配 “catalog”。
  3. 分词
    • 使用 \b 可以方便地识别单词边界,用于英文分词。
  4. 连续匹配
    • \G 常用于循环提取数据,比如 CSV 或者日志中的字段。

总结

  • ^$ → 行的开头和结尾
  • \b\B → 单词边界与非边界
  • \A / \Z / \z → 输入整体的开始与结束
  • \G → 上一个匹配的结束位置

边界匹配器让我们能更精确地控制匹配位置,而不仅仅是“有没有匹配”。

到此这篇关于一文详解Java正则表达式中的边界匹配器的文章就介绍到这了,更多相关Java正则表达式边界匹配器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot实现整合微信支付方法详解

    SpringBoot实现整合微信支付方法详解

    这篇文章主要介绍了SpringBoot实现整合微信支付的过程详解,文中的示例代码对我们的工作或学习有一定的帮助,感兴趣的小伙伴可以跟随小编学习一下
    2021-12-12
  • SpringCache的简介和使用教程

    SpringCache的简介和使用教程

    缓存是实际工作中经常使用的一种提高性能的方法, 我们会在很多场景下来使用缓存,而spring-cache就是一种简单的实现。通过本文学习可以了解SpringCache的简介和使用方法,感兴趣的朋友一起看看吧
    2021-11-11
  • Java编程经典小游戏设计-打砖块小游戏源码

    Java编程经典小游戏设计-打砖块小游戏源码

    这篇文章主要介绍了Java编程经典小游戏设计-打砖块小游戏源码,还是挺不错的,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 实例讲述Java IO文件复制

    实例讲述Java IO文件复制

    本篇文章通过实例给大家详细讲述Java IO文件复制的相关知识点,需要的读者们学习下吧。
    2018-02-02
  • java中"==" 与equals方法的使用

    java中"==" 与equals方法的使用

    本篇文章介绍了,在java中"==" 与equals方法的使用。需要的朋友参考下
    2013-04-04
  • 作为Java程序员应该掌握的10项技能

    作为Java程序员应该掌握的10项技能

    这篇文章主要介绍了作为Java程序员应该掌握的10项技能,包括java的知识点与相关的技能,对于java的学习有不错的参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • SpringBoot学习之全局异常处理设置(返回JSON)

    SpringBoot学习之全局异常处理设置(返回JSON)

    本篇文章主要介绍了SpringBoot学习之全局异常处理设置(返回JSON),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Java中的取余与取模运算概念、区别代码实践

    Java中的取余与取模运算概念、区别代码实践

    这篇文章主要介绍了Java中的取余与取模运算概念、区别代码实践,需要的朋友可以参考下
    2007-02-02
  • Spring Boot的Profile配置详解

    Spring Boot的Profile配置详解

    本篇文章主要介绍了Spring Boot的Profile配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • springboot3.0整合rabbitmq3.13的实现示例

    springboot3.0整合rabbitmq3.13的实现示例

    本文主要介绍了springboot3.0整合rabbitmq3.13的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09

最新评论