我在C++中有一个带有Boost的正则表达式,它匹配多行字符串中的行.正则表达式搜索找到第一个匹配,但我对匹配的最后一行感兴趣.
我现在使用的代码是这样的:
matched = boost::regex_search(input, results, regex);
if (!matched) {
return -1; // error code
}
matched_string = results["Group"];
Run Code Online (Sandbox Code Playgroud)
如果regex是"(?<Group>Data.)"和input是"Data1 Data2 Data3",然后matched_string是现在"Data1".我想要它"Data3".
operator[]的match_results返回sub_match.
sub_match继承std::pair迭代器.它first和second成员对应匹配的范围.因此,您可以将其second用作新搜索的起点.例如:
string input = "Data1 Data2 Data3";
regex re("(?<Group>Data.)");
string::const_iterator begin = input.begin(), end = input.end();
smatch results;
while ( regex_search( begin, end, results, re ) ) {
smatch::value_type r = results["Group"];
begin = r.second;
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.