当前位置: 首页 > news >正文

445. Java 正则表达式 - 边界匹配器

文章目录

  • 445. Java 正则表达式 - 边界匹配器
    • 📌 常见的边界匹配符
    • 🔍 举例说明
      • 1. `^` 和 `$`:匹配行首和行尾
      • 2. `\b`:单词边界
      • 3. `\B`:非单词边界
      • 4. `\G`:上一个匹配的结束位置
    • 💡 实际应用场景
    • 🚀 总结

445. Java 正则表达式 - 边界匹配器

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

这些都可以通过边界匹配器(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→ 上一个匹配的结束位置

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

http://www.gsyq.cn/news/1596165.html

相关文章:

  • Nub:快速一体化 Node.js 工具包,多方面性能远超传统工具!
  • Web应用白屏问题全链路排查:从诊断到预防的实战指南
  • Beyond Compare 5 密钥生成工具完整指南:5步快速获取专业版授权
  • 海盐勾兑和天然海水差在哪?械字号鼻腔喷雾的硬核品质分界线
  • Easysearch 布尔查询优化(上)|写法不影响顺序,结构才影响性能
  • 2026最新各类命理软件观察:命理排盘软件怎么判断是否适合新手?
  • 本地模型也能懂逻辑,Ryzen AI 数学推理能力测试
  • Flutter:一款免费开源的 SDK,助力开发者打造多平台高效应用!
  • 谷歌调整开发者计费方式:30%统一费率变“更低、解耦费率”,多举措降低分成比例
  • 鸿蒙窗口管理在 Flutter 项目里的落地:沉浸式、系统栏、返回键拦截的协同
  • HTML 的 <blockquote> 元素
  • IMX6ULL Qt 项目(控制led灯和蜂鸣器)全流程
  • Intel平台主板怎么选:Z890新平台与B760升级路线参考
  • 科技局如何精准识别辖区企业的真实创新需求?
  • 040、CCA 上下文坐标注意力的 YOLOv11 实现:扩大坐标信息感受野的改进
  • 8大网盘下载限速终结者:本地化直链获取工具深度解析
  • 如何校准LED显示屏色彩均匀性以消除视觉马赛克
  • 3分钟轻松搞定!为Royal TSX添加完美中文汉化包,告别英文界面困扰
  • 高通近 40 亿美元收购 Modular,拓展业务进军 AI 与数据中心市场
  • AWVS实战:构建自动化扫描与手动验证的Web漏洞评估闭环
  • Kill-Doc:浏览器脚本实现一站式文档下载解决方案
  • +1毛也是首选!申通这家五星网点的底气
  • 工信局如何利用数智工具判断技术改造项目的可行性?
  • StarRailAssistant:解放双手的崩坏星穹铁道智能助手完全指南
  • SSL证书验证失败全解析:从诊断到修复的实战指南
  • chemdraw软件安装步骤(附安装包)ChemDraw 2023 超详细下载安装教程
  • Cesium 夜间教程
  • k6:写代码一样做性能测试
  • 超维空间镜像 打造营区全场景物理空间透明化数智中枢 技术解析白皮书
  • 【第二部分】STM32CubeMX 创建 STM32F103CBT6 完整标准流程