std::match_results::size() 返回什么?
在 C 11 中, std::match_results::size( ) 函数返回匹配结果对象中捕获组的数量加一(整个匹配
考虑以下代码:
<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>
此代码查找字符串“abcdefabcghiabc”中第一次出现的子字符串“abc”,并将匹配结果存储在 matches 对象中。令人惊讶的是,调用 matches.size() 返回 1 而不是 3(预期的匹配数)。
此行为的解释是,regex_search() 仅返回一个匹配项,而 size() 包含完整的匹配项匹配和任何捕获组。在这种情况下,没有捕获组,因此 size() 返回 1(仅完全匹配)。
查找多个匹配
要查找并计算多个匹配,使用 std::sregex_iterator 或 std::wsregex_iterator (对于宽字符串)。下面是一个使用 std::sregex_iterator 的示例:
<code class="cpp">#include <iostream> #include <string> #include <regex> using namespace std; int main() { std::regex r("abc"); std::string s = "abcdefabcghiabc"; int count = 0; for (std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r); i != std::sregex_iterator(); ++i) { count++; } cout << "Number of matches: " << count << endl; }</code>
此代码迭代字符串中“abc”的所有匹配项并对其进行计数。
捕获组
如果您的正则表达式包含捕获组(带括号的子表达式),则匹配结果的大小也将包括捕获组。例如,如果您有一个匹配“abc(def)”的正则表达式,并且输入字符串包含“abcdef”,则匹配结果的大小将为 2(完全匹配并捕获组“def”)。
以上是C 中 std::match_results::size() 返回多少项?的详细内容。更多信息请关注PHP中文网其他相关文章!