我在C ++中有一个带有Boost的正则表达式,它匹配多行字符串中的行。正则表达式搜索找到第一个匹配,但我对匹配的最后一行感兴趣。
我现在使用的代码是这样的:
matched = boost::regex_search(input, results, regex);
if (!matched) {
return -1; // error code
}
matched_string = results["Group"];
如果regex
为"(?<Group>Data.)"
且input
为"Data1 Data2 Data3"
,则matched_string
现为"Data1"
。我希望它是"Data3"
。
答案 0 :(得分:5)
operator[]
的{p> 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;
}
希望这有帮助。