2016-01-25 4 views
2

Я использую 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 подобран

ответ

5

От повышающего документации функция алгоритма regex_match

Алгоритм алгоритма regex_match определяет, соответствует ли данное регулярное выражение все из заданной последовательности символов, обозначенной парой двунаправленных-итераторы, то алгоритм определяется следующим образом, основное использование этой функции - проверка ввода данных.

В случае, если вы хотите использовать «BB», чтобы соответствовать, вы должны будете использовать повышение :: regex_search вместо

+0

спасибо, повышение :: regex_search точно то, что я хочу – ethandu7

+0

Python делает то же самое различие между * матч * и * поиск *. Если вы не проверяете строку (как правило, вы можете доверять своим вводам, потому что она сгенерирована машиной), это ваш * поиск *, который вы хотите. Достаточно легко добавить начало и конец привязок строк '^' и '$', если вам нужно проверить всю строку – Borodin