std::match_results::size()
std::match_results::size()를 사용하여 정규식 일치 크기 결정 일치 그룹 수와 정규식 일치 내의 전체 일치 값에 대한 통찰력. 그 기능을 자세히 살펴보겠습니다.
C 11 코드에서 std::match_results::size()는 정규식 일치에 대한 정보를 얻는 데 사용됩니다. 전체 일치 항목과 정규식에 지정되었을 수 있는 캡처 그룹을 포함하는 개수를 반환합니다. 그러나 제공되는 값은 예상 일치 수와 다를 수 있습니다.
다음 예를 고려하세요.
<code class="cpp">std::string haystack("abcdefabcghiabc"); std::regex needle("abc"); std::smatch matches; std::regex_search(haystack, matches, needle); std::cout << matches.size() << std::endl;</code>
이 경우 3개의 일치 결과를 얻을 것으로 예상할 수 있습니다. 그러나 regex_search()는 일치하는 항목을 하나만 검색하므로 1개만 받게 됩니다. size() 함수는 캡처 그룹 수와 전체 일치 항목을 보고합니다.
명확하게 설명하기 위해 std::match_results는 일치 세부 정보와 발견된 모든 하위 일치 항목을 보유합니다. 정규식 검색이 성공하면 비어 있지 않습니다. 여기에는 일련의 sub_match 개체가 포함되어 있으며 초기 개체는 전체 일치를 나타냅니다. match_results 개체의 다른 sub_match 개체는 정규식 내의 하위 그룹에 해당합니다(괄호로 표시).
예를 들어 다음 정규식을 고려하세요.
<code class="cpp">"ab(c)"</code>
다음과 같은 캡처 그룹이 있습니다. 문자 "c"를 트랩합니다. 다음 코드는 std::regex_iterator를 사용하여 여러 일치 항목을 찾아 문자열 파괴를 방지합니다.
<code class="cpp">std::string str("abcdefabcghiabc"); std::regex rgx1("abc"); smatch smtch; while (regex_search(str, smtch, rgx1)) { std::cout << smtch[0] << std::endl; str = smtch.suffix().str(); }</code>
이 코드는 "abc"를 세 번 인쇄합니다.
또는 std::sregex_iterator를 사용할 수도 있습니다. 보다 효율적이고 문자열 보존 방법을 제공합니다.
<code class="cpp">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() << "\n"; std::cout << " Capture: " << m[1].str() << "\n"; }</code>
이 코드는 전체 일치 및 캡처 값을 인쇄하여 std::match_results::size() 동작에 대한 철저한 이해를 제공합니다.
위 내용은 `std::match_results::size()`는 정규식에서 일치 항목 수를 어떻게 결정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!