如何匹配以"!"开头的所有十进制数字? (bang)在给定的字符串中?我编写了以下代码,但它失败并带有断言
#include<iostream>
#include<regex>
int main()
{
std::string s1("{!112,2,3}");
std::regex e(R"(\!\d+)", std::regex::grep);
std::cout << s1 << std::endl;
std::sregex_iterator iter(s1.begin(), s1.end(), e);
std::sregex_iterator end;
while(iter != end)
{
std::cout << "size: " << iter->size() << std::endl;
for(unsigned i = 0; i < iter->size(); ++i)
{
std::cout << "the " << i + 1 << "th match" << ": " << (*iter)[i] << std::endl;
}
++iter;
}
}
断言
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
Aborted (core dumped)
答案 0 :(得分:2)
首先,确保您使用的是最新的GCC编译器。
然后使用与感叹号匹配的R"(!(\d+))"
模式,然后捕获Iinto Group 1中的一个或多个数字。
然后在迭代匹配时抓住保存您的值的(*iter)[1]
。
请参阅C++ demo:
#include<iostream>
#include<regex>
int main() {
std::string s1("{!112,2,3} {!346,765,8}");
std::regex e(R"(!(\d+))");
std::cout << s1 << std::endl;
std::sregex_iterator iter(s1.begin(), s1.end(), e); std::sregex_iterator end;
while(iter != end) {
std::cout << "Value: " << (*iter)[1] << std::endl;
++iter;
}
}
输出:
{!112,2,3} {!346,765,8}
Value: 112
Value: 346