2010-01-14 22 views
5

"Normal" desen, st değişkeninin bir alt dizesi ise, çıktı "eşleme" yapmak istiyorum. Mümkün mü?boost regex alt dizesi eşleştirmesi

boost :: regex_match yalnızca tam dizeyle eşleşir
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

bunu denediniz mi? Öyleyse ne oldu? –

+0

evet, "eşleşmiyor" st = "normal" "eşleşme" eşleştiğinde – bob

cevap

16

, muhtemelen artırmak :: regex_search yerine istiyoruz.

7

regex_search ne yapar;

Verilen düzenli ifadenin belirli karakter dizisi

(vurgu ben alıntı yapıyorum orijinal URL'den olan) arasında tüm maçları belirler olarak regex_match belgelenmiştir.

0

Sorunuz kütüphane belgelerinde örnekle cevaplanır - boost::regex

Alternatif yaklaşım:

Sen boost :: regex_iterator kullanabilirsiniz, bu vb dosyayı aşağıda

string[0], 
string[1] 

ayrıştırma için yararlıdır başlangıç ​​ve bitiş yineleyicisini gösterir.

Ör:

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

Bu sayfadaki kabul edilen yanıt daha iyi açıklıyor sregex_iterator http://stackoverflow.com/questions/2593288/how-to-use-c -boosts-normal ifade-yineleyici – syam