451. Java 正则表达式 - Matcher 的 start(), end(), matches() 和 lookingAt()

📅 2026/7/2 20:16:06
451. Java 正则表达式 - Matcher 的 start(), end(), matches() 和 lookingAt()
文章目录451. Java 正则表达式 - Matcher 的 start(), end(), matches() 和 lookingAt()1️⃣ 使用 start() 和 end() 方法功能示例统计单词 dog 出现次数2️⃣ 使用 matches() 和 lookingAt() 方法功能示例 小技巧451. Java 正则表达式 - Matcher 的start(),end(),matches()和lookingAt()在正则表达式培训中理解匹配位置和匹配方式非常重要。Matcher类提供了一系列方法帮助我们精确定位匹配并判断匹配行为。1️⃣ 使用start()和end()方法功能start()返回匹配子序列的起始索引end()返回匹配子序列的结束索引 1可以精确知道匹配的内容在原字符串中的位置。示例统计单词dog出现次数importjava.util.regex.Pattern;importjava.util.regex.Matcher;publicclassMatcherDemo{privatestaticfinalStringREGEX\\bdog\\b;privatestaticfinalStringINPUTdog dog dog doggie dogg;publicstaticvoidmain(String[]args){PatternpPattern.compile(REGEX);Matchermp.matcher(INPUT);intcount0;while(m.find()){count;System.out.println(Match number count);System.out.println(start(): m.start());System.out.println(end(): m.end());}}}输出结果Matchnumber1start():0end():3Matchnumber2start():4end():7Matchnumber3start():8end():11说明使用\b确保dog是完整单词而不是doggie或dogg的一部分。start()和end()可以结合截取子字符串比如input.substring(m.start(), m.end())得到匹配的文本。2️⃣ 使用matches()和lookingAt()方法功能matches()要求整个输入字符串匹配正则表达式lookingAt()只要求从输入开头开始匹配不需要覆盖整个字符串示例importjava.util.regex.Pattern;importjava.util.regex.Matcher;publicclassMatchesLooking{privatestaticfinalStringREGEXfoo;privatestaticfinalStringINPUTfooooooooooooooooo;publicstaticvoidmain(String[]args){PatternpatternPattern.compile(REGEX);Matchermatcherpattern.matcher(INPUT);System.out.println(Current REGEX is: REGEX);System.out.println(Current INPUT is: INPUT);System.out.println(lookingAt(): matcher.lookingAt());System.out.println(matches(): matcher.matches());}}输出结果CurrentREGEXis:fooCurrentINPUTis:fooooooooooooooooolookingAt():truematches():false说明lookingAt()返回true因为输入字符串从开头就是foo开始。matches()返回false因为整个字符串foooooooooooooooo并不等于foo。✅总结start()/end()→ 精确定位匹配位置matches()→ 完全匹配整个输入lookingAt()→ 匹配输入开头部分即可 小技巧\b边界匹配符可以避免匹配到单词的一部分start()/end()与group()搭配可轻松获取匹配文本及位置lookingAt()很适合前缀匹配场景