Я использую boost regex, но я смущен синтаксисом, используемым regex boost. Если я хочу использовать шаблон «bb» для соответствия строке «aabbcc», я должен сделать шаблон «bb» равным «.bb. *», Чтобы строка была сопоставлена. Это связано с тем, что в perl вам не нужно добавлять «. *» В начале и в конце «bb». Я пропустил что-то о повышающем регулярном выражении, или это просто вкус регулярного выражения boost? Ниже мой простой исходный код для этого вопроса:boost regex pattern syntax confusion
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main() {
boost::regex regex_bb01("bb");
boost::regex regex_bb02(".*bb");
boost::regex regex_bb03("bb.*");
boost::regex regex_bb04(".*bb.*");
if(boost::regex_match("aabbcc", regex_bb01))
std::cout<<"the regex_bb01 is matched\n";
else
std::cout<<"the regex_bb01 is Not matched\n";
if(boost::regex_match("aabbcc", regex_bb02))
std::cout<<"the regex_bb02 is matched\n";
else
std::cout<<"the regex_bb02 is Not matched\n";
if(boost::regex_match("aabbcc", regex_bb03))
std::cout<<"the regex_bb03 is matched\n";
else
std::cout<<"the regex_bb03 is Not matched\n";
if(boost::regex_match("aabbcc", regex_bb04))
std::cout<<"the regex_bb04 is matched\n";
else
std::cout<<"the regex_bb04 is Not matched\n";
}
результат выглядит следующим образом:
[корень @ LOCALHOST BoostCase] # ./regex_test
regex_bb01 не соответствует
regex_bb02 не сопоставляется
regex_bb03 не соответствует
regex_bb04 подобран
спасибо, повышение :: regex_search точно то, что я хочу – ethandu7
Python делает то же самое различие между * матч * и * поиск *. Если вы не проверяете строку (как правило, вы можете доверять своим вводам, потому что она сгенерирована машиной), это ваш * поиск *, который вы хотите. Достаточно легко добавить начало и конец привязок строк '^' и '$', если вам нужно проверить всю строку – Borodin