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

发布时间:2026/6/26 22:53:16
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.);❌ 不匹配因为dog是doggie的一部分不是完整单词。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);✅ 会找到两个结果dog0-3 和dog4-7。但如果我们用\GPattern p2 Pattern.compile(\\Gdog); Matcher m2 p2.matcher(dog dog);✅ 只找到第一个因为第二个dog并不是紧挨着第一个结果。这种情况常用于逐步扫描比如日志分析。 实际应用场景行首/行尾校验验证输入是不是只包含某个单词^yes$。检查某一行是不是以分号结尾;$。单词搜索搜索文档中独立出现的 “cat”\bcat\b避免误匹配 “catalog”。分词使用\b可以方便地识别单词边界用于英文分词。连续匹配\G常用于循环提取数据比如 CSV 或者日志中的字段。 总结^和$→ 行的开头和结尾\b和\B→ 单词边界与非边界\A/\Z/\z→ 输入整体的开始与结束\G→ 上一个匹配的结束位置边界匹配器让我们能更精确地控制匹配位置而不仅仅是“有没有匹配”。