2010-12-22 46 views
6

我找不到std::regex库的参考。我做了一些谷歌搜索,并找到了一些教程,但它们都很简短。我无法弄清楚如何使用正则表达式来标记字符串。如何在Visual Studio 2010中使用std :: regex库标记字符串?

任何人都可以给我一个提示如何开始?

+3

请将您的第二个问题作为一个单独的问题发布。 – 2010-12-22 18:19:04

回答

0

我认为自boost ::正则表达式网站的例子可以解决我的问题;)

/* 
* 
* 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; 
    } 
} 
相关问题