参考文档:
Reference <regex>
microsoft Learn->Microsoft C++、C 和 汇编程序->C++ 标准库->C++ 标准库头文件->regex
¶regex 库的简单应用
- std::regex
- regex 是
char basic_regex
的类型定义,这个类模板描述包含正则表达式的对象,这个类模板的对象可以传递给模板函数 regex_match、regex_search 和 regex_replace。它还传递合适的文本字符串自变量,以搜索与正则表达式匹配的文本
- regex 是
- std::smatch
- smatch 是
string match_results
的类型定义,类模板描述一个对象,该对象用于控制由正则表达式搜索生成的sub_match<BidIt>
类型元素不可修改的序列。每个元素指向与该元素对应的捕获组匹配的子序列。
- smatch 是
- std::regex_search
- regex_search 函数用于搜索正则表达式匹配项。仅在其操作数序列中成功搜索到其正则表达式 re 时,每个模板函数才返回 true。 采用 match_results 对象的函数将其成员设置为反映搜索是否成功,以及如果成功,正则表达式中的各种捕获组所捕获的内容。
- This function returns true if the expression is found anywhere in the target sequence, even if the sequence contains more characters that are not part of the match before or after the match. For a function that returns true only when the entire sequence matches, see regex_match.
std::regex_search(str, matches, pattern)
- std::regex_match
- regex_match 函数用于测试正则表达式是否与整个目标字符串相匹配,每个模板函数仅在整个操作数序列 str 与正则表达式参数 re 完全匹配时才返回 true
- 请使用 regex_search 匹配目标序列中的子字符串,并使用 regex_iterator 查找多个匹配。 采用 match_results 对象的函数将其成员设置为反映匹配是否成功,以及如果成功,正则表达式中的各种捕获组所捕获的内容
std::regex_match(str, pattern)
std::regex_match(str, matches, pattern)
std::regex_match(str.cbegin(), str.cend(), matches, pattern)
其中 cbegin 与 cend 中的 c for const
- std::sregex_iterator
string regex_iterator
的类型定义,用于循环访问匹配结果using sregex_iterator = regex_iterator<string::const_iterator>;
std::sregex_iterator it(str.begin(), str.end(), pattern);
- std::regex_iterator::regex_iterator
- 用于循环访问匹配结果
std::regex_iterator<std::string::iterator> rit(str.begin(), str.end(), pattern);
- 正则表达式与 R
- 使用
R"()"
来定义一个原始字符串字面量(raw string literal)。这种语法允许你在字符串中使用特殊字符(比如反斜杠 \)而不需要进行转义
- 使用
- 常见的正则表达式编写规则
- 普通字符匹配:
- 普通字符(例如字母、数字)会直接匹配它们自己。例如:a 匹配字符 “a”
- 特殊字符:
- \ :用于转义特殊字符,使其成为普通字符。例如:. 匹配句号
- . :匹配除换行符之外的任意字符
- ^ :匹配行的开始位置
- $ :匹配行的结束位置
- 字符类别:
- [ ] :用于定义一个字符集合,匹配其中的任意一个字符
例如:[aeiou] 匹配任意一个元音字母,[^aeiou] 匹配任意一个非元音字母
- [ ] :用于定义一个字符集合,匹配其中的任意一个字符
- 预定义字符类别:
- \d :匹配任意一个数字(等价于 [0-9])
- \D :匹配任意一个非数字字符
- \w :匹配任意一个字母、数字或下划线字符(等价于 [a-zA-Z0-9_])
- \W :匹配任意一个非字母、数字或下划线字符
- 重复次数:
- * :匹配前面的字符零次或多次
- + :匹配前面的字符一次或多次
- ? :匹配前面的字符零次或一次
- {n} :匹配前面的字符恰好 n 次
- {n,} :匹配前面的字符至少 n 次
- {n,m} :匹配前面的字符至少 n 次,但不超过 m 次
- 分组和选择:
- ( ) :用于将表达式分组,以便对整个组应用重复次数或其他操作
- | :用于在两个或多个表达式之间选择一个。
- 转义字符:
- \ :用于转义特殊字符,使其成为普通字符。例如:\ 匹配字符 “”
- 开始和结束锚点:
- ^ :匹配字符串的开始位置
- $ :匹配字符串的结束位置
- 普通字符匹配:
¶regex 库的应用范例
¶regex_search example
1 | // regex_search example |
1 | Output: |
¶regex_match example
1 | // regex_match example |
1 | Output: |
¶regex_iterator example
1 | // regex_iterator constructor |
1 | Output: |
¶A specific application
1 |
|
1 | input: |