📜  C++ STL中的match_results begin()和end()函数(1)

📅  最后修改于: 2023-12-03 15:13:56.519000             🧑  作者: Mango

C++ STL中的match_results begin()和end()函数

在正则表达式匹配时,std::match_results类经常用于存储匹配结果。其中的begin()end()函数用于获取匹配结果的迭代器。本文将对这两个函数进行详细介绍。

begin()

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()函数获取匹配结果的迭代器,并用迭代器进行遍历。最后,我们使用迭代器的firstlength()成员变量获取匹配结果的起始位置和长度。

end()

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()函数获取匹配结果的迭代器,并用迭代器进行遍历。最后,我们使用迭代器的secondlength()成员变量获取匹配结果的结束位置和长度。

总结

begin()end()函数是C++ STL中std::match_results类中的两个非常有用的函数,用于获取正则表达式中匹配结果的迭代器。这两个函数可以方便地帮助程序员对正则表达式进行分析和处理。