Я пытаюсь найти несколько цифр в строке. Я в состоянии получить только последний, или предварительно заданное количество цифр:Как получить неизвестное количество совпадений регулярных выражений?
#include <iostream>
#include <regex>
#include <string>
int main()
{
std::string s("aaabbbccd123456eeffgg");
std::smatch match;
std::regex braced_regex("(\\w+)(\\d{2,})(\\w+)");
std::regex plus_regex("(\\w+)(\\d+)(\\w+)");
auto printer = [](auto& match) {
std::ssub_match sub(match);
std::string match_substring(sub.str());
std::cout << match_substring << '\n';
};
std::regex_match(s, match, braced_regex);
std::cout << "Number of braced matches: " << match.size() << '\n';
std::for_each(match.begin(), match.end(), printer);
std::regex_match(s, match, plus_regex);
std::cout << "Number of plus matches: " << match.size() << '\n';
std::for_each(match.begin(), match.end(), printer);
return 0;
}
Результат:
Number of braced matches: 4
aaabbbccd123456eeffgg
aaabbbccd1234
56
eeffgg
Number of plus matches: 4
aaabbbccd123456eeffgg
aaabbbccd12345
6
eeffgg
Как я могу получить всю числовую последовательность, то есть 123456 из предоставленной строки ?
Обратите внимание, что регулярное выражение * строку * является хорошим местом для использования строки (C++ 11): 'R" (([A-Za-Z] +) (\ d {2,}) ([a-zA-Z] +)) "' – Jarod42
Только для стиля: [очищенный код] (http: //coliru.stacked-crooked.com/a/cd87f7ea341a5f18) –
@ Jarod42 Спасибо за подсказку. –