std::match_results::size는 무엇을 반환하며, 일치 횟수와 일치하지 않는 이유는 무엇입니까?
std ::match_results::size C 11의 함수는 캡처 그룹 수에 전체 일치 값에 대해 1을 더한 값을 반환합니다. 제공한 코드에서는
<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; }
문자열 "abc"가 건초 더미에 세 번 나타나므로 출력이 3이 될 것으로 예상할 수 있습니다. 그러나 출력은 실제로 1입니다. 이는 regex_search가 일치 항목 하나만 반환하고 size()가 캡처 그룹 수와 전체 일치 값을 더한 값을 반환하기 때문입니다.
이 경우에는 캡처 그룹이 없으므로 캡처 그룹이 없습니다. size()는 전체 일치 값에 대해 1을 반환합니다. 건초 더미에서 "abc"와 일치하는 항목을 모두 찾으려면 여러 매개 변수와 함께 std::regex_search 함수를 사용할 수 있습니다.
<code class="cpp">int main() { std::string haystack("abcdefabcghiabc"); std::regex needle("abc"); std::vector<std::smatch> matches; std::regex_search(haystack, needle, matches, std::regex_constants::match_continuous); std::cout << matches.size() << std::endl; }
이 코드는 건초 더미에서 "abc"와 일치하는 모든 항목을 검색합니다. 일치 벡터에 저장합니다. 그러면 size() 함수는 발견된 일치 항목 수를 반환하며, 이 경우에는 3입니다.
대체 솔루션
여러 일치 항목을 찾는 다른 방법이 있습니다. 문자열. 한 가지 방법은 std::sregex_iterator를 사용하는 것입니다:
<code class="cpp">int main() { std::regex r("ab(c)"); std::string s = "abcdefabcghiabc"; for (std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r); i != std::sregex_iterator(); ++i) { std::smatch m = *i; std::cout << "Match value: " << m.str() << " at Position " << m.position() << '\n'; std::cout << " Capture: " << m[1].str() << " at Position " << m.position(1) << '\n'; } return 0; }
이 코드는 다음을 반환합니다:
Match value: abc at Position 0 Capture: c at Position 2 Match value: abc at Position 6 Capture: c at Position 8 Match value: abc at Position 12 Capture: c at Position 14
또 다른 방법은 std::regex_match 함수를 사용하는 것입니다:
<code class="cpp">int main() { std::regex r("abc"); std::string s = "abcdefabcghiabc"; std::vector<std::string> matches; std::smatch match; while (std::regex_search(s, match, r)) { matches.emplace_back(match[0]); s = match.suffix().str(); } std::cout << matches.size() << std::endl; }</code>
이 코드도 3을 반환합니다.
위 내용은 `std::match_results::size`가 문자열의 일치 항목 수를 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!