我有一個包含以下內容的字符串:「(5 {})(12 {})」C++如何使用正則表達式來提取一些子字符串?
我如何使用正則表達式來提取到兩個字符串變量子像這樣:
字符串1 = 「(5 {})」
字符串2 =「(12 {})」
我感興趣的一個模式將匹配,讓我提取這些字符串時,他們不僅是2,但更像所以:「(5 {})(12 {})(2 {})(34 {})」
我有一個包含以下內容的字符串:「(5 {})(12 {})」C++如何使用正則表達式來提取一些子字符串?
我如何使用正則表達式來提取到兩個字符串變量子像這樣:
字符串1 = 「(5 {})」
字符串2 =「(12 {})」
我感興趣的一個模式將匹配,讓我提取這些字符串時,他們不僅是2,但更像所以:「(5 {})(12 {})(2 {})(34 {})」
這應該爲你工作:
#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";
}
}
使用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';
}
}
構造正則表達式時,大寫字母R表示正則表達式模式字符串前的大寫字母? –
「Raw」 - http://en.cppreference.com/w/cpp/language/string_literal解釋 –
有很多這樣的問題,正則表達式匹配括號中的字符串,沒有你嘗試過什麼?看到[這個線程](http://stackoverflow.com/questions/18236767/regex-expression-to-extract-everything-inside-brackets),它可以給你一個jumpstart。 –
正則表達式對於這樣一個簡單的搜索來說是矯枉過正的。 –