std::match_results 的大小
问题:
在以下 C 11 代码中,为什么 matches.size() 返回 1 而不是预期的 3?
<code class="cpp">#include <iostream> #include <string> #include <regex> int main() { std::string haystack("abcdefabcghiabc"); std::regex needle("abc"); std::smatch matches; std::regex_search(haystack, matches, needle); std::cout << matches.size() << std::endl; }</code>
答案:
std::match_results 的 size() 函数返回捕获组数加1,表示完全匹配。在本例中,没有捕获组,因此大小为 1。
说明:
regex_search 函数查找输入中正则表达式的第一次出现细绳。在本例中,它在字符串的开头找到“abc”。 matches 对象包含有关匹配的信息,包括捕获组。
但是,提供的正则表达式不包含捕获组。捕获组是正则表达式中与输入字符串的特定部分匹配的括号。如果使用捕获组,matches.size() 将返回捕获组的数量加 1。
查找多个匹配项:
要查找多个匹配项,您可以使用迭代匹配的替代方法:
<code class="cpp">int main() { std::regex r("abc"); std::string s = "abcdefabcghiabc"; int i = 0; std::sregex_iterator it(s.begin(), s.end(), r); std::sregex_iterator end; while (it != end) { std::smatch m = *it; std::cout << i++ << ": " << m.str() << std::endl; it++; } return 0; }</code>
此代码将打印:
0: abc 1: abc 2: abc
以上是为什么 `std::match_results::size()` 对于没有捕获组的正则表达式返回 1?的详细内容。更多信息请关注PHP中文网其他相关文章!