C++标准库的正则表达式笔记
在学习boost库中正则表达式相关函数的使用方法时发现C++标准库里已经有处理正则表达式的相关函数了,只需#include<regex>即可使用正则表达式相关函数,做个学习记录:
std::cmatch中部分成员的含义:(以匹配一个obj文件中的顶点数据为例)
迭代器std::sregex_iterator()用法:
std::regex regex("表达式");
auto b = std::sregex_iterator(str.begin(), str.end(), regex); auto e = std::sregex_iterator(); //默认构造的std::regex_iterator
是序列尾迭代器 int l = std::distance(b, e); //获取与表达式匹配的字符串数 std::cout << l << std::endl; for (; b != e; b++) { sm = *b; std::cout << sm.str() << std::endl; }
这个迭代器用法有点特殊,与默认构造的迭代器比较来判断是否迭代结束,中文文档上原话是这样的:
默认构造的 std::regex_iterator
是序列尾迭代器。在抵达最后匹配(std::regex_search 返回 false )后自增合法的 std::regex_iterator
时,它变得等于序列尾迭代器。进一步解引用或自增它引发未定义行为。
就是我们定义的迭代器自加迭代完所有匹配正则表达式的字符串后就会变得与默认构造的迭代器相等,可以用在循环中用我们自己构造的迭代器与默认构造的迭代器比较来判断迭代是否结束。
参考链接https://zh.cppreference.com/w/cpp/regex