Здравствуйте, rg45, Вы писали:
R>Жаль, что ты не дал словесного описания задачи, ведь из нерабочего регекса можно понять неправильно. Если я только правильно понял условие, то решение может быть таким:
Супер! Прям то что надо! Спасибо огромное!
Задачу в проекте закрыл, твой копирайт приписал, уехало в продакшен.
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, Мёртвый Даун, Вы писали:
МД>Всем привет! МД>С регуляркой дружу поскольку постольку. Есть вопрос, достать номер телефона. Но проблема скорее всего с незнанием std::regex.
Жаль, что ты не дал словесного описания задачи, ведь из нерабочего регекса можно понять неправильно. Если я только правильно понял условие, то решение может быть таким:
С регуляркой дружу поскольку постольку. Есть вопрос, достать номер телефона. Но проблема скорее всего с незнанием std::regex.
// телефон
std::string pattern(R"(^((8|\\+420)[\\- ]?)?(\\(?\\d{3}\\)?[\\- ]?)?[\\d\\- ]{7,10}$)");
std::string data("4207743822140");
std::smatch match;
try
{
if (std::regex_match(data, match, pattern))
{
// вот тут в match имеем 5 совпадений
// и например, match[3] выглядит вот так в дебагере:
// match[3].matched = true
// match[3].first = "420" // это итератор?
// match[3].second = "7743822140" // это итератор?const std::string s1 = ...; // вот сюда хочу именно вот это "7743822140",
// как достать?
}
}
catch (const std::regex_error& e)
{
// smth. wrong
}
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, Мёртвый Даун, Вы писали:
МД>Всем привет! МД>С регуляркой дружу поскольку постольку. Есть вопрос, достать номер телефона. Но проблема скорее всего с незнанием std::regex.
Когда-то очень давно решал такую задачу, когда делал плагин для фаерфокса с подсветкой телефонных номеров. Главный вопрос при проектировании был — а что считать номером телефона?
Но в моём случае пришлось отказаться от регулярок в пользу ручного парсинга, ибо когда было много телефонов и много вкладок, ff начинал сильно педалить.
Здравствуйте, Мёртвый Даун, Вы писали:
МД> // match[3].first = "420" // это итератор? МД> // match[3].second = "7743822140" // это итератор?
Это, похоже, итераторы на вот эту группу (8|\\+420) , первый на начало строки, второй на конец группы
Достать как-то так,
const std::string s1 = (match[3].first, match[3].second);
но, видимо, нужна не группа 3, а группа 0 — всё выражение, или 1 — всё, что в корневых скобках.