我想创造一个刮板,去学习。我试图在文件中获得所有正好10位数的长数字。
#include <fstream>
#include <iostream>
#include <regex>
int main()
{
std::string subject("098765432123 1234567890");
try {
std::regex re("[0-9]{10}");
std::sregex_iterator next(subject.begin(), subject.end(), re);
std::sregex_iterator end;
while (next != end) {
std::smatch match = *next;
std::cout << match.str() << "\n";
next++;
}
} catch (std::regex_error& e) {
// Syntax error in the regular expression
}
}
我的输出是:
0987654321
1234567890
但是这个字符串&#34; 098765432123 1234567890&#34;我想得到所有数字:
0987654321
9876543212
8765432123
1234567890
我不知道问题是来自我的正则表达式还是来自下一个++
感谢您的建议。
答案 0 :(得分:3)
您可以使用std::sregex_iterator
并在评论中使用solution linked by Drew Dormann,或者您可以使用std::regex_search
代替迭代器,并将first
更新到以下位置一发现:
std::string subject("098765432123 1234567890");
std::regex re("[0-9]{10}");
auto first = subject.begin();
auto last = subject.end();
std::match_results<decltype(first)> match;
while ( std::regex_search(first, last, match, re) ) {
std::cout << match.str() << "\n";
first = std::next(match.prefix().second);
}
<强> Demo 强>