Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Стандартные классы
В регулярных выражениях допустимы следующие основные стандартные классы (полный список смотрите в документации):
\d
— соответствует любой цифре;\w
— соответствует любой букве, цифре или символу подчеркивания. По умолчанию эквивалентно:[a-zA-Z0-9_]
;\s
— любой пробельный символ (пробел, табуляция, перевод страницы, новая строка или перевод каретки);\D
— не цифра. Эквивалентно:[^\d]
;\W
— эквивалентно:[^\w]
;\S
— не пробельный символ. Эквивалентно:[^\s]
.
Следует учитывать, что стандартные классы могут зависеть от различных флагов и трактоваться гораздо шире, чем мы указали. В итоге можно получить результат, который совсем не ожидался. Советую на практике использовать только классы \s
и \S
, а остальные заменять явным указанием диапазона символов внутри квадратных скобок (при этом не забывайте про букву ё
):
std::regex rgx("[0-9]+"); // Вместо \d
rgx = "[a-zA-Zа-яА-ЯёЁ0-9_]+"; // Вместо \w
Получим все цифры из строки:
std::regex rgx("[0-9]");
std::smatch m;
std::string str("текст123 456");
while (std::regex_search(str, m, rgx)) {
std::cout << m.str() << ' ';
str = m.suffix().str();
} // 1 2 3 4 5 6
std::cout << std::endl;
В этом примере мы воспользовались функцией regex_search()
в сочетании с классом smatch
. Метод str()
класса smatch
возвращает фрагмент, полностью совпадающий с шаблоном регулярного выражения, а метод suffix()
— возвращает оставшийся фрагмент, в котором поиск еще не выполнялся. Чтобы найти все фрагменты, соответствующие шаблону, мы указываем функцию regex_search()
в качестве условия цикла while
, а внутри цикла присваиваем переменной str
оставшуюся часть строки. Как только функция regex_search()
вернет значение false
, цикл завершится.
Если нужно получить не цифры по отдельности, а числа, то после закрывающей квадратной скобки нужно указать символ +
, означающий одно или большее число вхождений символа в строку:
std::regex rgx("[0-9]+");
std::string str("текст123 456");
std::sregex_iterator istart(str.begin(), str.end(), rgx);
std::sregex_iterator iend;
while (istart != iend) {
std::cout << istart->str() << ' ';
++istart;
} // 123 456
std::cout << std::endl;
В этом примере вместо функции regex_search()
мы воспользовались двумя итераторами, реализуемыми с помощью класса sregex_iterator
. Хотя, если просто изменить первую строку в предыдущем примере и добавить символ +
, то результат будет точно таким же.
Внутри квадратных скобок можно также использовать стандартные классы регулярных выражений формата POSIX
:
[:alnum:]
— алфавитно-цифровые символы;[:w:]
— аналог класса\w
;[:alpha:]
— буквенные символы;[:lower:]
— строчные буквы;[:upper:]
— прописные буквы;[:digit:]
или[:d:]
— десятичные цифры;[:xdigit:]
— шестнадцатеричные цифры;[:punct:]
— знаки пунктуации;[:blank:]
— символы табуляции и пробелов;[:space:]
или[:s:]
— пробельные символы;[:cntrl:]
— управляющие символы;[:print:]
— печатные символы;[:graph:]
— печатные символы, за исключением пробела.
Получим все числа из строки:
std::regex rgx("[[:digit:]]+");
std::string str("s123 s456 789s");
std::sregex_iterator istart(str.begin(), str.end(), rgx);
std::sregex_iterator iend;
while (istart != iend) {
std::cout << istart->str() << ' ';
++istart;
} // 123 456 789
std::cout << std::endl;
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов