Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpRgMl 18 of 696 menu
◀ ▶

Многострочность в регулярках в C++

Регулярки при работе с многострочными строками имеют свои особенности. Разберем их на примере следующей строки, содержащей обычные символы, символы перевода строк и табуляции:

std::string txt = R"(111 222 333 444)";

Символы перевода строки можно поймать с помощью команды '\n':

std::regex re(R"(\n)"); std::string res = std::regex_replace(txt, re, "!"); std::cout << res << "\n";

В результате выведется следующая строка (промежутки между строками - это табуляция):

'111! 222! 333! 444'

Символы табуляции можно поймать с использованием команды '\t':

std::regex re(R"(\t)"); std::string res = std::regex_replace(txt, re, "!"); std::cout << res << "\n";

Результат выполнения кода:

''' !111 !222 !333 !444 '''

Команда '.' для многострочной строки не ловит символы перевода строки:

std::regex re(R"(.)"); std::string res = std::regex_replace(txt, re, "!"); std::cout << res << "\n";

Результат выполнения кода:

''' !!! !!!! !!!! !!!! '''

Чтобы поймать все символы в многострочной строке, используется хитрый прием в виде сочетания [\s\S]. Такая конструкция найдет все обычные символы и все переводы строк:

std::regex re(R"([\\s\\S])"); std::string res = std::regex_replace(txt, re, "!"); std::cout << res << "\n";

Результат выполнения кода:

'!!!!!!!!!!!!!!!!!!'

Команда '$' в std::regex совпадает только с концом всей строки, а не с концом каждой строки внутри текста:

std::regex re(R"($)"); std::string res = std::regex_replace(txt, re, "!"); std::cout << res << "\n";

Результат выполнения кода:

''' 111! 222! 333! 444! '''

Дана строка:

''' abc def ghi jkl '''

Напишите регулярку, которая сделает из этой строки следующую:

''' abc! def! ghi! jkl! '''

Дана строка:

''' abc def ghi jkl '''

Напишите регулярку, которая сделает из этой строки следующую:

''' ! abc ! def ! ghi ! jkl '''

Дана строка:

''' abc def ghi jkl '''

Напишите регулярку, которая сделает из этой строки следующую:

'''! abc def ghi jkl !'''

Дана строка:

''' abc def ghi jkl '''

Напишите регулярку, которая сделает из этой строки следующую:

'''! ! abc ! def ! ghi ! jkl !'''

Дана строка:

''' abc def ghi jkl '''

Напишите регулярку, которая сделает из этой строки следующую:

'''! abc! def! ghi! jkl! !'''

Дана строка:

''' abc def ghi jkl '''

Напишите регулярку, которая сделает из этой строки следующую:

''' !abc !def !ghi !jkl '''
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить