std::match_results::size
C에서 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>
matches.size()가 3을 반환할 것으로 예상했지만 대신 , 1을 얻습니다. 이는 regex_search가 일치 항목을 하나만 반환하고 size()가 캡처 그룹 수에 전체 일치 값을 더한 값을 반환하기 때문입니다. 이 경우 캡처 그룹이 없으므로 크기는 1입니다(전체 일치 자체).
여러 일치 항목을 얻으려면 다음 대체 코드에 설명된 std::regex_iterator를 사용할 수 있습니다.
<code class="cpp">std::regex rgx1("abc"); int i = 0; smatch smtch; while (regex_search(str, smtch, rgx1)) { std::cout << i << ": " << smtch[0] << std::endl; i += 1; str = smtch.suffix().str(); }</code>
이 코드는 입력 문자열을 파괴하므로 다음을 사용하는 또 다른 대안이 있습니다. std::sregex_iterator:
<code class="cpp">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'; }</code>
이 반복자 기반 접근 방식은 일치 항목을 반복하면서 원래 문자열을 유지합니다.
위 내용은 정규식 검색에서 `std::match_results::size`가 여러 일치 항목에 대해 3 대신 1을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!