2013-07-26 1 views
0

Я просто не могу получить функцию regex_match для поиска совпадений без учета регистра. Несмотря на то, boost::xpressive::regex_constants::icase является defined и я использую бросок (так что нет никакой двусмысленности в icase метода Xpressive), я получаю ошибку компиляции (VS2010):Нечувствительность к регистру с Boost Xpressive

ошибка C2440: «приведение типа»: не удается преобразовать из 'Const подталкивание :: Xpressive :: подробнее :: modifier_op' к 'повышение :: Xpressive :: regex_constants :: match_flag_type'

Некоторый код для воспроизведения:

#include <stdio.h> 
#include <boost/xpressive/xpressive.hpp> 

int main(){ 
    std::string str("FOO"); 
    boost::xpressive::sregex re = boost::xpressive::sregex_compiler().compile("foo"); 
    bool result = regex_match(str,re,(boost::xpressive::regex_constants::match_flag_type)boost::xpressive::regex_constants::icase); 
    if(result){ 
     std::cout << "Match!"; 
    }else{ 
     std::cout << "No match!"; 
    } 
    return 0; 
} 

вы знаете, в чем проблема возможно?

ответ

2

Попробуйте использовать

boost::xpressive::sregex re = boost::xpressive::sregex_compiler(). 
compile("foo", boost::xpressive::icase); 

syntax_options_type (то есть boost::xpressive::regex_constants::icase_) не match_flag_type (3 аргумент regex_match должен иметь этот тип).

+0

спасибо, что работает для меня! – muffel

+0

Справа. И в будущем послушайте, что компилятор вам говорит. Тот факт, что вам нужно было приложить флаг 'icase' к' match_flag_type' для его компиляции, должен был дать вам указание, что вы делаете что-то неправильно. Затем прочитайте документы. :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^