1. 小括号()
作用:
捕获组 (capturing group)
把括号里的内容单独保存下来,方便后续用
match[i]取出。例子:
(\d+)
匹配一串数字,并把这串数字保存下来。
匹配
"abc123def"→ 捕获组 ="123"。
分组 (grouping)
只是单纯地把表达式包起来,作为一个整体。
例子:
(ab)+
匹配
"ababab",因为+应用在(ab)上。
如果不想捕获,只想分组,可以用 (?:...) (但 c++11 <regex> 不支持这个写法,python/pcre 支持)。
2. 加号+
作用:
量词,表示 前一个元素重复 1 次或多次。
常见用法:
\d+→ 至少 1 个数字a+→ 至少 1 个字母a
对比:
\d→ 一个数字\d+→ 一个或多个数字\d*→ 零个或多个数字(包括空串)\d?→ 零个或一个数字
3. 美元符号$
作用:
锚点,表示 字符串结尾。
例子:
\d$→ 匹配以数字结尾的字符串。✅
"abc123"(结尾是3)❌
"abc123x"(结尾不是数字)
常见配合:
^→ 开头$→ 结尾
4. 反斜杠 \
作用:
转义字符,让后面的字符有特殊意义,或者取消特殊意义。
常见写法:
\d→ 匹配一个数字,相当于[0-9]\w→ 匹配字母/数字/下划线,相当于[a-za-z0-9_]\s→ 匹配空白字符(空格、制表符、换行等)\.→ 匹配一个点号.(因为裸写.表示任意字符)
5. 双反斜杠\\(c++ 代码里)
这个点最容易搞混:
在 c++ 源代码字符串里,\ 也被用作转义符。
"\\d"在 c++ 字符串里实际内容是\d,传给正则引擎时才是正确的写法。如果写成
"\d",c++ 会把它当成非法转义。
所以在 c++ 里写正则时,所有 \ 都要写成 \\。
例子:
std::regex r("\\d+");
实际传给正则引擎的字符串是:\d+,匹配 1 个或多个数字。
6. 小总结(口诀)
()→ 捕获/分组+→ 至少 1 次(量词)$→ 字符串结尾\→ 正则里的转义符\\→ c++ 里的转义,为了让正则收到\
对比例子
\d+在 c++ 里要写成
"\\d+"匹配:
123、42、0
(\d+)_\d+$在 c++ 里要写成
"(\\d+)_\\d+$"匹配:
123_456捕获组1 =
123
^abc$只能匹配
"abc",因为必须开头是a,结尾是c,且不能多也不能少。
总结
到此这篇关于正则表达式中(), +, $, \, \\的含义和区别的文章就介绍到这了,更多相关正则表达式(), +, $, \, \\区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论