2011-04-07 6 views
11

मैं एक स्ट्रिंग है:मैं स्ट्रिंग के भीतर बार-बार मिलान करने के लिए नई सी ++ 0x रेगेक्स ऑब्जेक्ट का उपयोग कैसे करूं?

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

और मैं यह करने के लिए बार-बार यह नियमित अभिव्यक्ति लागू करना चाहते हैं:

hello ([0-9]+) 

और किसी भी तरह मैच और उनके कैप्चर समूहों के माध्यम से पुनरावृति करने में सक्षम हो। मैंने स्ट्रिंग में कुछ के लिए पहला मैच खोजने और कैप्चर समूह की सामग्री का निरीक्षण करने के लिए सी ++ 0x में सफलतापूर्वक "रेगेक्स" सामग्री का उपयोग किया है; हालांकि, मुझे यकीन नहीं है कि स्ट्रिंग पर यह कई बार कैसे करें जब तक कि सभी मैच नहीं मिल जाते। मदद!

(प्लेटफार्म दृश्य स्टूडियो 2010, मामले में यह मायने रखती है।)

उत्तर

13

regex_match, उपयोग regex_search प्रयोग न करें। आप यहां उदाहरण पा सकते हैं: http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15339

इस चाल करना चाहिए (नोटिस मैं सीधे ब्राउज़र में टाइप कर रहा हूँ, यह संकलन नहीं किया है):

#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

धन्यवाद! मुझे पसंद से थोड़ा अधिक जटिल, लेकिन उदाहरण वास्तव में मदद की। – Colen

संबंधित मुद्दे