2016-12-16 2 views
-3

私は以下の内容を含む文字列を持っている:「(5 {})(12 {})」C + +正規表現を使って部分文字列を抽出するには?

どのように私はそうのような2つの文字列変数のサブストリングに抽出するために正規表現を使用することができます。

文字列1 =を「(5 {})」

string2の=「(12 {})」

Iが一致し、彼らはもっと好きではないだけである2が、ときに私は、これらのサブストリングを抽出できるようになるパターンに興味"(5 {})(12 {})(2 {})(34 {})"

+0

括弧の間の文字列に一致するように、このような正規表現の質問の多くは、あなたが何をしようとしていないがありますか? [this thread](http://stackoverflow.com/questions/18236767/regex-expression-to-extract-everything-inside-brackets)を参照すると、ジャンプスタートを与えることができます。 –

+0

このような簡単な検索では、正規表現は大過剰です。 –

答えて

0

これはあなたのために働く必要があります。

[live]

#include <iostream> 
#include <iterator> 
#include <regex> 
#include <string> 

int main() 
{ 
    std::string s = "(5 {}) (12 {}) (2 {}) (34 {})"; 
    std::regex re{R"((\([0-9]+? \{\}\)))"};  
    using reg_itr = std::regex_token_iterator<std::string::iterator>; 
    for (reg_itr it{s.begin(), s.end(), re, 1}, end{}; it != end;) {    
     std::cout << *it++ << "\n"; 
    } 
} 
0

使用std::regex_iterator文字列中のすべての一致を反復処理します。

#include <iostream> 
#include <regex> 
#include <string> 
int main() { 
    std::string subject = "(5 {}) (12 {}) (2 {}) (34 {})"; 
    std::regex pattern(R"((\d+ \{\}))"); 
    for (auto i = std::sregex_iterator(subject.begin(), subject.end(), pattern); i != std::sregex_iterator(); ++i) { 
     std::cout << i->str() << '\n'; 
    } 
} 

http://coliru.stacked-crooked.com/a/d91947b49f6a326d

+0

正規表現を構築するときに、大文字のRが正規表現のパターン文字列の前で何を意味しますか? –

+1

「未処理」this - http://en.cppreference.com/w/cpp/language/string_literal説明 –

関連する問題