35人参与 • 2026-09-07 • 正则表达式
捕获组 (capturing group)
把括号里的内容单独保存下来,方便后续用 match[i] 取出。
例子:
(\d+)
匹配一串数字,并把这串数字保存下来。
匹配 "abc123def" → 捕获组 = "123"。
分组 (grouping)
只是单纯地把表达式包起来,作为一个整体。
例子:
(ab)+
匹配 "ababab",因为 + 应用在 (ab) 上。
如果不想捕获,只想分组,可以用 (?:...) (但 c++11 <regex> 不支持这个写法,python/pcre 支持)。
量词,表示 前一个元素重复 1 次或多次。
常见用法:
\d+ → 至少 1 个数字
a+ → 至少 1 个字母 a
对比:
\d → 一个数字
\d+ → 一个或多个数字
\d* → 零个或多个数字(包括空串)
\d? → 零个或一个数字
锚点,表示 字符串结尾。
例子:
\d$ → 匹配以数字结尾的字符串。
✅ "abc123"(结尾是 3)
❌ "abc123x"(结尾不是数字)
常见配合:
^ → 开头
$ → 结尾
4. 反斜杠 \
转义字符,让后面的字符有特殊意义,或者取消特殊意义。
常见写法:
\d → 匹配一个数字,相当于 [0-9]
\w → 匹配字母/数字/下划线,相当于 [a-za-z0-9_]
\s → 匹配空白字符(空格、制表符、换行等)
\. → 匹配一个点号 .(因为裸写 . 表示任意字符)
这个点最容易搞混:
在 c++ 源代码字符串里,\ 也被用作转义符。
"\\d" 在 c++ 字符串里实际内容是 \d,传给正则引擎时才是正确的写法。
如果写成 "\d",c++ 会把它当成非法转义。
所以在 c++ 里写正则时,所有 \ 都要写成 \\。
例子:
std::regex r("\\d+");
实际传给正则引擎的字符串是:\d+,匹配 1 个或多个数字。
() → 捕获/分组
+ → 至少 1 次(量词)
$ → 字符串结尾
\ → 正则里的转义符
\\ → c++ 里的转义,为了让正则收到 \
\d+
在 c++ 里要写成 "\\d+"
匹配:123、42、0
(\d+)_\d+$
在 c++ 里要写成 "(\\d+)_\\d+$"
匹配:123_456
捕获组1 = 123
^abc$
只能匹配 "abc",因为必须开头是 a,结尾是 c,且不能多也不能少。
到此这篇关于正则表达式中(), +, $, \, \\的含义和区别的文章就介绍到这了,更多相关正则表达式(), +, $, \, \\区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论