Символ шляпки внутри наборов в C++
Как вы знаете, шляпка внутри [ ]
делает отрицание, будучи написанной в
начале скобок. Значит, она является
спецсимволом внутри этих скобок. Чтобы
получить шляпку как символ, нужно или
заэкранировать ее, или убрать с первого
места.
В следующем примере шаблон поиска такой:
первый символ - это все кроме 'd',
потом две буквы 'x':
std::string txt = "axx bxx ^xx dxx"
std::regex re(R"([^d]xx)");
std::string res = std::regex_replace(txt, re, "!");
std::cout << res << "\n";
В результате в переменную запишется следующее:
'! ! ! dxx'
А теперь шаблон поиска такой: первый
символ - это 'd' или '^',
потом две буквы 'x':
std::string txt = "axx bxx ^xx dxx"
std::regex re(R"([d^]xx)");
std::string res = std::regex_replace(txt, re, "!");
std::cout << res << "\n";
В результате в переменную запишется следующее:
'axx bxx ! !'
Можно не убирать шляпку с первого места, а просто заэкранировать ее с использованием обратного слеша, и она станет обозначать саму себя:
std::string txt = "axx bxx ^xx dxx"
std::regex re(R"([\\^d]xx)");
std::string res = std::regex_replace(txt, re, "!");
std::cout << res << "\n";
В результате в переменную запишется следующее:
'axx bxx ! !'
Дана строка:
std::string txt = "^xx axx ^zz bkk @ss"
Напишите регулярку, которая найдет строки по шаблону: шляпка или собака, а затем две латинских буквы.
Дана строка:
std::string txt = "^xx axx ^zz bkk @ss"
Напишите регулярку, которая найдет строки по шаблону: НЕ шляпка и не собака, а затем две латинских буквы.
Дана строка:
std::string txt = "^xx axx ^zz bkk"
Напишите регулярку, которая найдет строки по шаблону: не шляпка и не пробел, а затем две латинских буквы.