C ++ Regex从字符串中提取所有可能的10位数字

时间:2018-04-24 14:48:14

标签: c++ regex

我想创造一个刮板,去学习。我试图在文件中获得所有正好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

我不知道问题是来自我的正则表达式还是来自下一个++

感谢您的建议。

1 个答案:

答案 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