2010-01-14 21 views
5

Chcę przywrócić wynik "dopasuj", jeśli wzór "regular" jest pod-ciągiem zmiennej st. czy to możliwe?Podsumowanie podciągów doładowania dopasowanie

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

Czy próbowałeś go? Jeśli tak, co się stało? –

+0

tak, dostaję "nie pasuje" jeśli st = "regular" Dostaję "dopasować" – bob

Odpowiedz

16

Boost :: regex_match pasuje tylko do całego ciągu, prawdopodobnie potrzebujesz boost :: regex_search.

7

regex_search robi to, co chcesz; regex_match jest udokumentowana jako

określa, czy dana regularne wyrażenie pasuje wszystkie danego sekwencji znaków

(nacisk kładzie się w oryginalnym URL cytuję z).

0

Twoje pytanie jest z przykładu w dokumentacji biblioteki - boost::regex

Alternatywne podejście:

Można używać boost :: regex_iterator ta jest przydatna do analizowania pliku itp

string[0], 
string[1] 

poniżej wskazuje iterator początkowy i końcowy.

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

Przyjęta odpowiedź na tej stronie lepiej wyjaśnia sregex_iterator http://stackoverflow.com/questions/2593288/how-to-use-c -boosts-regex-iterator – syam