2014-03-21 1 views
0

С расширенным регулярным выражением существует ли способ (динамически) заставить ВСЕ искать регистр, нечувствительный (или нет), с некоторым флагом или настройкой, вместо того, чтобы делать каждый регистр с независимым регистром независимо друг от друга? Я хочу передать мою программу флага для чувствительности к регистру, а затем есть все регулярные выражения (есть МНОГО!) Быть подходящими для этой спецификации ...динамический флаг или настройка для поведения чувствительности к регистру в режиме повышения?

+0

Что случилось с указанием подталкивания :: regex_constants :: ИКАСЕ? –

ответ

0

Вы могли бы поддерживать отдельные строк, содержащие регулярное выражение,
и пусто увеличить регулярное выражение.

Затем, когда вы запускаете программу, только назначьте строку и флаги регулярному выражению boost.
Включите myconst.h, где вы используете регулярное выражение (и вызываете SetupRegex()).

I.e.

myconst.h

#include <boost/regex.hpp> 
#include <string> 

using namespace std; 
using namespace boost; 

#define MYFLAGS regex_constants::perl 
#define MYFLAGS_I regex_constants::perl | boost::regex_constants::icase 

extern boost::regex rx1; 
extern boost::regex rx2; 
extern boost::regex rx3; 

void SetupRegex(bool bIgnoreCase = true); 

myconst.cpp

#include "myconst.h" 

string str_rx1 = " regex 1 "; 
string str_rx2 = " regex 2 "; 
string str_rx3 = " regex 3 "; 

boost::regex rx1; 
boost::regex rx2; 
boost::regex rx3; 


void SetupRegex(bool bIgnoreCase) 
{ 
    unsigned flags = MYFLAGS; 
    if (bIgnoreCase) 
     flags = MYFLAGS_I; 

    rx1.assign(str_rx1, flags); 
    rx2.assign(str_rx2, flags); 
    rx3.assign(str_rx3, flags); 
} 
Смежные вопросы