2010-12-22 14 views
6

मुझे std::regex लाइब्रेरी का संदर्भ नहीं मिला। मैंने कुछ Google खोज की और कुछ ट्यूटोरियल पाये, लेकिन वे सभी संक्षिप्त और संक्षिप्त हैं। मैं regex का उपयोग कर एक स्ट्रिंग को टोकननाइज़ करने का तरीका नहीं समझ सका।विजुअल स्टूडियो 2010 में std :: regex लाइब्रेरी का उपयोग कर तारों को टोकन कैसे करें?

क्या कोई मुझे एक संकेत दे सकता है कि कैसे शुरू किया जाए?

+3

कृपया अपना दूसरा प्रश्न एक अलग प्रश्न के रूप में पोस्ट करें। –

+0

@ जॉन: संपादित! याद दिलाने के लिए शुक्रिया। – Chan

+1

चैन, टीटीबीओएमके 'std :: regex'' boost :: regex' से उत्पन्न होता है, जो [बूस्ट पर प्रलेखित] है [http://www.boost.org/doc/libs/1_45_0/libs/regex/doc/html /index.html)। यदि आप इंस्टॉलेशन समस्याओं का वर्णन करने वाले आइटमों पर छोड़ देते हैं तो आपके पास एक बहुत संपूर्ण दस्तावेज है, मुझे लगता है। – sbi

उत्तर

0

मैं बढ़ावा :: regex साइट से एक उदाहरण मेरी समस्या का समाधान कर सकता लगता है;)

/* 
* 
* Copyright (c) 12003 
* John Maddock 
* 
* Use, modification and distribution are subject to the 
* Boost Software License, Version 1.0. (See accompanying file 
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 
* 
*/ 

/* 
    * LOCATION: see http://www.boost.org for most recent version. 
    * FILE   regex_token_iterator_example_1.cpp 
    * VERSION  see <boost/version.hpp> 
    * DESCRIPTION: regex_token_iterator example: split a string into tokens. 
    */ 


#include <boost/regex.hpp> 

#include <iostream> 
using namespace std; 


#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && (__BORLANDC__ == 0x550)) 
// 
// problem with std::getline under MSVC6sp3 
istream& getline(istream& is, std::string& s) 
{ 
    s.erase(); 
    char c = static_cast<char>(is.get()); 
    while(c != '\n') 
    { 
     s.append(1, c); 
     c = static_cast<char>(is.get()); 
    } 
    return is; 
} 
#endif 


int main(int argc, const char*[]) 
{ 
    string s; 
    do{ 
     if(argc == 1) 
     { 
     cout << "Enter text to split (or \"quit\" to exit): "; 
     getline(cin, s); 
     if(s == "quit") break; 
     } 
     else 
     s = "This is a string of tokens"; 

     boost::regex re("\\s+"); 
     boost::sregex_token_iterator i(s.begin(), s.end(), re, -1); 
     boost::sregex_token_iterator j; 

     unsigned count = 0; 
     while(i != j) 
     { 
     cout << *i++ << endl; 
     count++; 
     } 
     cout << "There were " << count << " tokens found." << endl; 

    }while(argc == 1); 
    return 0; 
} 
2
#include <regex> 
#include <iostream> 
#include <string> 


void ifIWantASpecificMatch() 
{ 
    const std::string input = "Hello World"; 
    const std::regex regex("(.*) (.*)"); 

    std::smatch match; // std::match_result ready templated for std::string 

    if (std::regex_match(input, match, regex)) { 
     std::cout << "full match " << match[0] << std::endl; 
     std::cout << "first group " << match[1] << 
     " beginning at: " << match[1].first - input.begin() << std::endl; 
     std::cout << "second group " << match[2] << 
     " beginning at: " << match[2].first - input.begin() << std::endl; 
    } 
} 


void ifIWantToIterateAllMatches() 
{ 
    const std::string input = "I want to get all the o's"; 
    const std::regex regex("o"); 

    std::smatch match; 

    for (std::sregex_iterator it(input.begin(), input.end(), regex), end; it != end; ++it) { 
     std::cout << "Found at: " << it->position() << std::endl; 
    } 
} 
संबंधित मुद्दे