📅  最后修改于: 2023-12-03 15:13:56.519000             🧑  作者: Mango
在正则表达式匹配时,std::match_results
类经常用于存储匹配结果。其中的begin()
和end()
函数用于获取匹配结果的迭代器。本文将对这两个函数进行详细介绍。
begin()
函数返回一个迭代器,该迭代器指向第一个匹配子串的起始位置。如果没有匹配任何子串,则返回的迭代器等同于end()
函数返回的迭代器。
使用示例:
#include <iostream>
#include <regex>
int main()
{
std::regex pattern("quick");
std::string text = "The quick brown fox jumps over the lazy dog.";
std::smatch matches;
if (std::regex_search(text, matches, pattern)) {
for (auto it = matches.begin(); it != matches.end(); ++it) {
std::cout << "Matched: " << *it << '\n';
}
auto first_match = matches.begin();
std::cout << "The first match starts at index " << first_match->first << '\n';
// Output: The first match starts at index 4
auto first_string = text.begin() + first_match->first;
std::cout << "The first match is: " << std::string(first_string, first_string + first_match->length()) << '\n';
// Output: The first match is: quick
}
return 0;
}
在这个示例中,我们使用std::regex_search()
函数查找匹配结果,然后使用begin()
函数获取匹配结果的迭代器,并用迭代器进行遍历。最后,我们使用迭代器的first
和length()
成员变量获取匹配结果的起始位置和长度。
end()
函数返回的迭代器指向最后一个匹配子串的下一个位置。如果没有匹配任何子串,则返回的迭代器等同于begin()
函数返回的迭代器。
使用示例:
#include <iostream>
#include <regex>
int main()
{
std::regex pattern("fox");
std::string text = "The quick brown fox jumps over the lazy dog.";
std::smatch matches;
if (std::regex_search(text, matches, pattern)) {
for (auto it = matches.begin(); it != matches.end(); ++it) {
std::cout << "Matched: " << *it << '\n';
}
auto last_match = matches.end() - 1;
std::cout << "The last match ends at index " << last_match->second << '\n';
// Output: The last match ends at index 28
auto last_string = text.begin() + last_match->second;
std::cout << "The last match is: " << std::string(last_string, last_string + last_match->length()) << '\n';
// Output: The last match is: fox
}
return 0;
}
在这个示例中,我们同样使用std::regex_search()
函数查找匹配结果,然后使用end()
函数获取匹配结果的迭代器,并用迭代器进行遍历。最后,我们使用迭代器的second
和length()
成员变量获取匹配结果的结束位置和长度。
begin()
和end()
函数是C++ STL中std::match_results
类中的两个非常有用的函数,用于获取正则表达式中匹配结果的迭代器。这两个函数可以方便地帮助程序员对正则表达式进行分析和处理。