Информация об изменениях

Сообщение Re: std::regex парсинг номера телефона от 09.12.2017 23:47

Изменено 09.12.2017 23:47 rg45

Re: std::regex парсинг номера телефона
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Всем привет!

МД>С регуляркой дружу поскольку постольку. Есть вопрос, достать номер телефона. Но проблема скорее всего с незнанием std::regex.

Жаль, что ты не дал словесного описания задачи, ведь из нерабочего регекса можно понять неправильно. Если я только правильно понял условие, то решение может быть таким:

https://ideone.com/69RjO3

#include <iostream>
#include <regex>
     
std::string exptract_phone_number(const std::string& input)
{
  const std::regex pattern(R"(^(8|\+?420)\s*\-?\s*(?:(\d{3})|\((\d{3})\))\s*\-?\s*(\d{7})$)");
  std::smatch match;
  return std::regex_match(input, match, pattern) ?
  match[2].str() + match[3].str() + match[4].str() : "";
}
    
int main()
{
  std::cout << exptract_phone_number("4207743822140") << std::endl;
  std::cout << exptract_phone_number("+420-7743822140") << std::endl;
  std::cout << exptract_phone_number("+420-(774)3822140") << std::endl;
  std::cout << exptract_phone_number("+420774-3822140") << std::endl;
  std::cout << exptract_phone_number("+420(774)-3822140") << std::endl;
  std::cout << exptract_phone_number("+420-774-3822140") << std::endl;
  std::cout << exptract_phone_number("+420-(774)-3822140") << std::endl;
     
  std::cout << exptract_phone_number("87743822140") << std::endl;
  std::cout << exptract_phone_number("8-7743822140") << std::endl;
  std::cout << exptract_phone_number("8-(774)3822140") << std::endl;
  std::cout << exptract_phone_number("8774-3822140") << std::endl;
  std::cout << exptract_phone_number("8(774)-3822140") << std::endl;
  std::cout << exptract_phone_number("8-774-3822140") << std::endl;
  std::cout << exptract_phone_number("8-(774)-3822140") << std::endl;
}
Re: std::regex парсинг номера телефона
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Всем привет!

МД>С регуляркой дружу поскольку постольку. Есть вопрос, достать номер телефона. Но проблема скорее всего с незнанием std::regex.

Жаль, что ты не дал словесного описания задачи, ведь из нерабочего регекса можно понять неправильно. Если я только правильно понял условие, то решение может быть таким:

https://ideone.com/69RjO3

#include <iostream>
#include <regex>
     
std::string exptract_phone_number(const std::string& input)
{
  const std::regex pattern(R"(^(8|\+?420)\s*\-?\s*(?:(\d{3})|\((\d{3})\))\s*\-?\s*(\d{7})$)");
  std::smatch match;
  return std::regex_match(input, match, pattern) ?
    match[2].str() + match[3].str() + match[4].str() : "";
}
    
int main()
{
  std::cout << exptract_phone_number("4207743822140") << std::endl;
  std::cout << exptract_phone_number("+420-7743822140") << std::endl;
  std::cout << exptract_phone_number("+420-(774)3822140") << std::endl;
  std::cout << exptract_phone_number("+420774-3822140") << std::endl;
  std::cout << exptract_phone_number("+420(774)-3822140") << std::endl;
  std::cout << exptract_phone_number("+420-774-3822140") << std::endl;
  std::cout << exptract_phone_number("+420-(774)-3822140") << std::endl;
     
  std::cout << exptract_phone_number("87743822140") << std::endl;
  std::cout << exptract_phone_number("8-7743822140") << std::endl;
  std::cout << exptract_phone_number("8-(774)3822140") << std::endl;
  std::cout << exptract_phone_number("8774-3822140") << std::endl;
  std::cout << exptract_phone_number("8(774)-3822140") << std::endl;
  std::cout << exptract_phone_number("8-774-3822140") << std::endl;
  std::cout << exptract_phone_number("8-(774)-3822140") << std::endl;
}