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

450. Java 正则表达式 - Matcher 类详解

文章目录

  • 450. Java 正则表达式 - Matcher 类详解
    • 1️⃣ 索引方法(Index Methods)
      • 示例:
    • 2️⃣ 查找方法(Study Methods)
      • 示例:
    • 3️⃣ 替换方法(Replacement Methods)
      • 示例 1:`replaceAll`
      • 示例 2:`appendReplacement` + `appendTail`
      • 示例 3:`quoteReplacement`
    • 🔹 小结

450. Java 正则表达式 - Matcher 类详解

Matcher类是 Java 正则表达式中非常核心的类,它提供了定位、匹配和替换等丰富功能。


1️⃣ 索引方法(Index Methods)

这些方法帮助你找到匹配内容在字符串中的起始位置和结束位置

方法说明
int start()返回上一次匹配的起始索引
int start(int group)返回指定捕获组的起始索引
int end()返回上一次匹配的结束索引(即匹配的最后一个字符的下一个位置)
int end(int group)返回指定捕获组的结束索引

示例:

importjava.util.regex.*;publicclassMatcherIndexDemo{publicstaticvoidmain(String[]args){Stringinput="cat dog cat";Patternpattern=Pattern.compile("(cat)");Matchermatcher=pattern.matcher(input);while(matcher.find()){System.out.println("Found '"+matcher.group(1)+"' from "+matcher.start(1)+" to "+matcher.end(1));}}}

输出:

Found'cat'from0to3Found'cat'from8to11

💡 说明:

  • matcher.group(1)对应第一个捕获组(cat)
  • start()end()返回精确的索引位置,方便提取或替换匹配内容

2️⃣ 查找方法(Study Methods)

这些方法判断是否存在匹配,并可以控制匹配范围。

方法说明
boolean lookingAt()输入开头开始匹配,部分匹配成功即返回true
boolean find()查找下一个匹配
boolean find(int start)从指定索引start开始查找下一个匹配
boolean matches()匹配整个输入,完全匹配才返回true

示例:

Patternpattern=Pattern.compile("\\d+");Matchermatcher=pattern.matcher("123abc456");// lookingAtSystem.out.println(matcher.lookingAt());// true,开头是数字// findwhile(matcher.find()){System.out.println("Found: "+matcher.group()+" at "+matcher.start()+"-"+matcher.end());}// matchesMatchermatcher2=pattern.matcher("123");System.out.println(matcher2.matches());// true,整个字符串是数字

3️⃣ 替换方法(Replacement Methods)

Matcher提供了丰富的方法替换匹配内容,适合文本处理。

方法说明
appendReplacement(StringBuffer sb, String replacement)非终结替换,用于循环替换部分匹配
appendTail(StringBuilder sb)终结替换,把剩余未匹配部分追加到结果
replaceAll(String replacement)替换所有匹配
replaceFirst(String replacement)替换第一个匹配
static quoteReplacement(String s)将替换字符串转为字面量字符串,避免$\被误解

示例 1:replaceAll

Stringinput="cat dog cat";Patternpattern=Pattern.compile("cat");Matchermatcher=pattern.matcher(input);Stringresult=matcher.replaceAll("lion");System.out.println(result);// 输出 lion dog lion

示例 2:appendReplacement+appendTail

Stringinput="one:two:three";Patternpattern=Pattern.compile(":");Matchermatcher=pattern.matcher(input);StringBuffersb=newStringBuffer();while(matcher.find()){matcher.appendReplacement(sb,"|");// 替换每个冒号为 |}matcher.appendTail(sb);// 添加剩余字符串System.out.println(sb.toString());// 输出 one|two|three

示例 3:quoteReplacement

Stringinput="price: $100";Patternpattern=Pattern.compile("\\$\\d+");Matchermatcher=pattern.matcher(input);// 使用字面量替换,避免 $ 被当作正则组Stringreplacement=Matcher.quoteReplacement("$200");Stringresult=matcher.replaceAll(replacement);System.out.println(result);// 输出 price: $200

💡 说明:

  • quoteReplacement很重要,避免$被当作分组引用
  • appendReplacement+appendTail可用于复杂替换逻辑

🔹 小结

  • 索引方法:快速定位匹配位置
  • 查找方法:灵活判断匹配,支持部分匹配和整体匹配
  • 替换方法:替换字符串、循环替换、字面量替换,文本处理利器

✅ 小技巧:

  • replaceAll适合简单替换
  • appendReplacement + appendTail适合复杂替换和按条件替换
http://www.jsqmd.com/news/1104181/

相关文章:

  • Acode安卓代码编辑器:在手机上实现专业级编程的终极解决方案
  • NGA论坛优化摸鱼体验终极指南:新手快速上手完整教程
  • 记录Linux线程(信号量函数)
  • 【NWFSP问题】麝牛算法MO求解零等待流水车间调度问题NWFSP【含Matlab源码 15685期】
  • Linux Wireless之WiFi Beacon Hint 流程分析
  • 9-LLTrack:用于二维多目标跟踪的并行关联框架
  • 告别繁琐,企业信息化一站式方案为你解忧!
  • 对称加密算法实战指南:从AES到SM4,原理、选型与安全实践
  • 内存芯片短缺致苹果多款产品提价,是无奈之举还是商业决策?
  • 腾讯、谷歌为 AI 发邮箱、钱包,安全与失控间人类还能犹豫多久?
  • 老牌顶刊跌下神坛,为何IF和分区双双“失守”?
  • 临沂家装对比参考:顶奢蜂窝板与市面普通板材差异解析
  • OpenTelemetry 多租户分流怎么做:按服务名路由 traces 的实战方案
  • ​​LangChain4j和LangGraph4j是合作还是竞品
  • openDeepWiki的新手如何操作
  • 三步打造个人数字图书馆:novel-downloader小说下载器终极指南
  • 大疆TSDK提取热红外图像(RJPG)温度信息,热红外图像转tiff或tif并用大疆智图或Pix4D拼接 | 热红外照片温度信息提取可处理1280x1024图像| 热红外温度图像处理-已打包成软件
  • 【毕业设计】基于智能推荐的卫生健康系统 SpringBoot+Vue 完整源码(含论文+数据库,可运行)
  • Grok 4.5私测,马斯克AI战略是转型还是出清?
  • 2026成都黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • EulerPublisher终极指南:如何一键发布openEuler云镜像到华为云、阿里云和AWS
  • VLC鼠标点击暂停插件:3分钟让你的视频控制更简单
  • 单片机串口环形缓冲区应该怎么写,或解析串口协议
  • 信息化项目的分类
  • java-基于ssm的一款房屋租赁管理系统
  • 基于交流潮流的电力系统多元件N-k故障模型研究(Matlab代码实现)【电力系统故障】
  • ESim电工制图图文介绍
  • 将“Git Bash Here“添加到windows11的新式右键菜单
  • Linux 系统编程 04:进程基础
  • 终极解决方案:一键捕获完整网页的Chrome扩展神器