>  기사  >  백엔드 개발  >  정규식 검색에서 `std::match_results::size`가 여러 일치 항목에 대해 3 대신 1을 반환하는 이유는 무엇입니까?

정규식 검색에서 `std::match_results::size`가 여러 일치 항목에 대해 3 대신 1을 반환하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-04 20:48:02880검색

Why does `std::match_results::size` return 1 instead of 3 for multiple matches in a regex search?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.