>백엔드 개발 >C++ >std::regex를 사용하여 문자열에서 여러 일치하는 단어를 효율적으로 추출하려면 어떻게 해야 합니까?

std::regex를 사용하여 문자열에서 여러 일치하는 단어를 효율적으로 추출하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-30 13:55:14269검색

How Can I Efficiently Extract Multiple Matching Words from a String Using std::regex?

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

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