2010-01-14 5 views
5

Я хочу вернуть выход «match», если шаблон «regular» является подстрокой переменной st. Это возможно?подгонка подстроки boost regex

int main() 
{ 
    string st = "some regular expressions are Regxyzr"; 

    boost::regex ex("[Rr]egular"); 
    if (boost::regex_match(st, ex)) 
    { 
    cout << "match" << endl; 
    } 
    else 
    { 
    cout << "not match" << endl; 
    } 
} 
+0

Вы пробовали это? Если да, то что случилось? –

+0

да, я получаю «не совпадать» , если st = «regular» Я получаю «соответствие» – bob

ответ

16

Усиление :: regex_match соответствует только всей строке, возможно, вам понадобится boost :: regex_search.

7

regex_search делает то, что вы хотите; regex_match документирована как

определяет, соответствует ли данное регулярное выражение все данного последовательности символов

(акцент в оригинальном URL я цитируя).

0

Ваш вопрос отвечает, например, в библиотеке документации - boost::regex

Альтернативный подход:

Вы можете использовать повышение :: regex_iterator, это полезно для разбора файла и т.д.

string[0], 
string[1] 

ниже указывает начальный и конечный итератор.

Ex:

boost::regex_iterator stIter(string[0], string[end], regExpression) 
boost::regex_iterator endIter 

for (stIter; stIter != endIter; ++stIter) 
{ 
    cout << " Whole string " << (*stIter)[0] << endl; 
    cout << " First sub-group " << (*stIter)[1] << endl; 
} 

}

+0

Принятый ответ на этой странице лучше объясняет sregex_iterator http://stackoverflow.com/questions/2593288/how-to-use-c -boosts-регулярное выражение-итератор – syam

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