正则捕获组怎么用 - 提取子串与分组引用实例

517 字
3 分钟
正则捕获组怎么用 - 提取子串与分组引用实例

🌟 捕获组:正则的”抓取夹”#

正则里的括号 ( ) 不只是”分组”,它还捕获匹配到的内容,方便后续提取或替换引用。这是正则从”匹配”走向”提取”的关键。星点正则测试器会列出每个捕获组的内容。


🔤 基本用法#

(\d{4})-(\d{2})-(\d{2})

匹配 2026-09-13 时:

组内容
组 0(整体)2026-09-13
组 12026
组 209
组 313

组 0 永远是”整个匹配”,其余按左括号出现顺序编号。


🔗 替换中引用#

  • $1、$2… 引用对应组;
  • $& 引用整个匹配;
  • $<name> 引用命名组。

例:把 2026-09-13 改成 13/09/2026:

  • 正则:(\d{4})-(\d{2})-(\d{2})
  • 替换:$3/$2/$1

🚫 非捕获组 (?: )#

只想分组、不想占用编号时用 (?: ):

(?:https?)://(\S+)

这样只有域名部分成为组 1,协议部分不计入捕获。


💡 实例#

提取键值对#

^(\w+)=(.+)$

组 1 是键,组 2 是值。

匹配重复单词#

\b(\w+)\s+\1\b

\1 是反向引用,要求与组 1 内容相同,用于找”the the”这类重复。


🆚 捕获组 vs 命名组#

对比捕获组 ( )命名组 (?<name> )
引用$1$<name>
可读性一般好
适用简单正则复杂/长期维护

命名组用法见正则命名捕获组怎么用。


⚠️ 注意#

  • 组是按左括号顺序编号的,加一个括号会让后面的编号顺延;
  • 未参与匹配的组值为空;
  • 括号要成对,否则报错。

🔧 常见问题#

组 0 是什么? 组 0 是整个匹配到的字符串,不是括号捕获的内容。
非捕获组有什么用? 只分组、不占用编号,让引用更清晰、性能略好。
能嵌套捕获组吗? 能,按左括号出现顺序编号。

💬 总结#

捕获组让正则能”抓子串”:( ) 捕获、$1 引用、(?: ) 不捕获。掌握后,提取日期、解析键值、去重都能轻松实现。

立即体验:访问 正则测试器

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

最后更新于 2026-09-13,距今已过 32 天

部分内容可能已过时

随机文章 随机推荐
公告
🎉 已升级 2.0 版本,欢迎使用。
分类
标签
站点统计
文章
197
分类
24
标签
747
总字数
334,099
运行时长
0 天
最后活动
0 天前

目录