2016-12-16 63 views
-3

我有一個包含以下內容的字符串:「(5 {})(12 {})」C++如何使用正則表達式來提取一些子字符串?

我如何使用正則表達式來提取到兩個字符串變量子像這樣:

字符串1 = 「(5 {})」

字符串2 =「(12 {})」

我感興趣的一個模式將匹配,讓我提取這些字符串時,他們不僅是2,但更像所以:「(5 {})(12 {})(2 {})(34 {})」

+0

有很多這樣的問題,正則表達式匹配括號中的字符串,沒有你嘗試過什麼?看到[這個線程](http://stackoverflow.com/questions/18236767/regex-expression-to-extract-everything-inside-brackets),它可以給你一個jumpstart。 –

+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

「Raw」 - http://en.cppreference.com/w/cpp/language/string_literal解釋 –