C ++如何使用正则表达式提取一些子串?

时间:2016-12-16 00:20:56

标签: c++ regex

我有一个包含以下内容的字符串:"(5 {})(12 {})"

如何使用正则表达式提取到两个字符串变量子串中,如下所示:

string1 ="(5 {})"

string2 ="(12 {})"

我对一个匹配的模式感兴趣,让我提取这些子串,当它们不仅仅是2但更像是这样:"(5 {})(12 {})(2 { })(34 {})"

2 个答案:

答案 0 :(得分:2)

这应该适合你:

[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";
    }
}

答案 1 :(得分:1)

使用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