Что не так с регулярным выражением
Необходимо из заданной строки выделить все адреса электронной почты с помощью регулярного выражения. Мой код:
#include <iostream>
#include <string>
#include <regex>
int main() {
std::string emails = "awlefla [email protected] adlf111 2 * [email protected] fgdfgd1gd141";
std::regex reg2("[a-z0-9_][a-z0-9_\.-]*[a-z0-9_]@([a-z0-9]+[a-z0-9_-]*[a-z0-9]\.)+[a-z0-9]{2,}");
std::smatch matches;
while (std::regex_search(emails, matches, reg2)) {
std::cout << matches[0] << "\n";
emails = matches.suffix().str();
}
return 0;
}
Выдает:
[email protected] adlf111
[email protected] fgdfgd1gd141
Причем для строки "awlefla [email protected] adlf111 2 * [email protected] fgdfgd1gd141" (два и более пробелов после адреса) рег. выражение работает как и задумано.
Пытался лучше изучить рег. выражения, но все равно не вижу, что тут не так.
Подскажите пожалуйста, где тут ошибка
IDE visual studio 2019
Стандарт ISO C++ 14
Ответы (1 шт):
Автор решения: Andrei
→ Ссылка
Необходимо экранировать в С++ косую черту Которая в регулярных выражениях экранирует точку:
#include <iostream>
#include <string>
#include <regex>
int main() {
std::string emails = "awlefla [email protected] adlf111 2 * [email protected] fgdfgd1gd141";
std::regex reg2("[a-z0-9_][a-z0-9_\\.-]*[a-z0-9_]@([a-z0-9]+[a-z0-9_-]*[a-z0-9]\\.)+[a-z0-9]{2,}");
std::smatch matches;
while (std::regex_search(emails, matches, reg2)) {
std::cout << matches[0] << "\n";
emails = matches.suffix().str();
}
return 0;
}