2011-04-07 18 views
11

Ben bir dize vardır:Bir dize içinde tekrar tekrar eşleştirmek için yeni C++ 0x regex nesnesini nasıl kullanırım?

"hello 1, hello 2, hello 17, and done!" 

Ve ben buna defalarca bu normal bir ifade uygulamak istiyorum:

hello ([0-9]+) 

Ve her nasılsa maçlar ve başlama yakalama grupları aracılığıyla yineleme edebilmek. Bir dizideki bir şey için ilk eşleşmeyi bulmak ve yakalama grubunun içeriğini incelemek için "regex" öğelerini C++ 0x 'da başarıyla kullandım; Ancak, tüm eşleşmeler bulunana kadar bu dizeyi bir dizede birden çok kez nasıl yapacağınızdan emin değilim. Yardım et!

(Platform bu konularda durumunda görsel stüdyo 2010 içindir.)

cevap

13

regex_match, kullanım regex_search kullanmayın. Örnekleri şu adreste bulabilirsiniz: http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15339.

Bu hile yapmak gerekir (ı doğrudan tarayıcıda yazarak kulüpler haber, derlemek vermedi):

#include <iostream> 
#include <regex> 

int main() 
{ 
    // regular expression 
    const std::regex pattern("hello ([0-9]+)"); 

    // the source text 
    std::string text = "hello 1, hello 2, hello 17, and done!"; 

    const std::sregex_token_iterator end; 
    for (std::sregex_token_iterator i(text.cbegin(), text.cend(), pattern); 
     i != end; 
     ++i) 
    { 
     std::cout << *i << std::endl; 
    } 

    return 0; 
} 
+0

teşekkür! İstediğimden biraz daha karmaşık, ama örnek gerçekten yardımcı oldu. – Colen

İlgili konular