C++ Weekly - Episode 62 脱水版: std::regex
本节主要讲 std::regex. 正则表达式库是 C++11 之后新增的一个库, 参考: en.cppreference.com/w/cpp/regex
假设我们想匹配一串如下格式的日志:
"123: [error] Hello World"
构建如下正则匹配表达式, 并打印结果. 使用正则表达式可以避免构造堆上字符串, 或者通过字符数组, 字符串, 迭代器来匹配目标字符串.
void dump_regex_matches(const std::cmatch &match)
{
std::cout << "Matches:\n";
for (std::size_t i = 0; i < match.size(); ++i) {
std::cout << i << ": " << match.str(i) << '\n';
}
}
int main()
{
std::regex regex(R"((\d+): \[([^\]]+)\] (.*))");
std::cmatch match;
std::regex_match("123: [error] Hello World", match, regex);
dump_regex_matches(match);
}
结果将输出
Matches:
0: 123: [error] Hello World
1: 123
2: error
3: Hello World
但是需要注意的是, 正则匹配在编译时似乎比较耗时.