std::regex를 사용하여 여러 결과 일치: 효과적인 솔루션
std::를 사용하여 문자열에서 여러 일치 단어를 추출하는 데 어려움을 겪음 정규식? 일반적인 오해는 "(bS*b){0,}" 패턴을 사용하여 단일 작업에서 단어를 일치시키는 것입니다. 그러나 이 접근 방식은 패턴 내의 선택적 수량자 {0,}로 인해 부족합니다.
문제 해결
이 문제를 해결하고 다음을 사용하여 여러 결과를 성공적으로 일치시키려면 std::regex에서는 선택적 수량자를 사용하지 않는 것이 중요합니다. 대신 다음 코드를 고려하세요.
regex exp("(\b\S*\b)"); smatch res; string str = "first second third forth"; string::const_iterator searchStart( str.cbegin() ); while ( regex_search( searchStart, str.cend(), res, exp ) ) { cout << ( searchStart == str.cbegin() ? "" : " " ) << res[0]; searchStart = res.suffix().first; } cout << endl;
솔루션 이해
이 업데이트된 접근 방식에는 regex_search를 반복적으로 수행하면서 입력 문자열을 반복하는 작업이 포함됩니다. 문자열 내의 검색 시작 위치를 초기화하고 더 이상 일치하는 항목이 발견되지 않을 때까지 패턴 일치를 계속합니다. 일치가 성공할 때마다 검색 시작 위치가 일치하는 단어 바로 뒤의 위치로 업데이트됩니다.
이 접근 방식의 이점
이 최적화된 솔루션을 사용하면 캡처 그룹을 사용할 필요가 없습니다. 이는 더 효율적이며 입력 문자열의 모든 단어가 추출되어 출력에서 공백으로 구분되도록 합니다.
위 내용은 std::regex를 사용하여 문자열에서 여러 일치하는 단어를 효율적으로 추출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!