2016-12-16 3 views
-3

Ich habe einen String mit folgendem Inhalt bekommen: "(5 {}) (12 {})"C++ Wie Regex verwenden, um einige Teilstrings zu extrahieren?

Wie kann ich Regex verwenden, um in zwei String-Variablen-Strings zu extrahieren wie so:

string1 = „(5 {})“

string2 = „(12 {})“

ich habe Interesse an einem Muster, das mir passt auf und lassen diese Teil extrahieren, wenn sie nicht nur zwei, sondern noch mehr wie so: "(5 {}) (12 {}) (2 {}) (34 {})"

+0

Es gibt viele solcher regex Fragen Zeichenfolge in Klammern zu entsprechen, Sie haben nichts versucht? Siehe [this thread] (http://stackoverflow.com/questions/18236767/regex-expression-in-extract-everything- inside-brackets), es könnte Ihnen einen Jumpstart geben. –

+0

Reguläre Ausdrücke sind für solch eine einfache Suche übertrieben. –

Antwort

0

Dies sollte für Sie arbeiten:

[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

Verwenden std::regex_iterator durch alle Spiele in einem String iterieren.

#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

Was bedeutet die Großbuchstabe R vor der Regexmuster-Zeichenkette, wenn die Regex erstellt wird? –

+1

"Raw" dies - http://en.cppreference.com/w/cpp/language/string_literal erklärt –

Verwandte Themen