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

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

Barbara Streisand
Barbara Streisand원래의
2024-12-15 08:17:16447검색

How Can I Efficiently Extract Multiple Words from a String Using C  's `std::regex`?

std::regex를 사용하여 여러 결과 일치

std::regex를 사용하여 여러 결과를 일치시키는 것은 여러 결과를 추출하는 편리한 방법이 될 수 있습니다. 단일 작업으로 문자열의 데이터. 그러나 제공된 정규식 "(bS*b){0,}"는 "first second third four" 문자열의 모든 단어를 일치시키는 데 적합하지 않습니다.

해결책:

원래 정규 표현식의 문제는 수량자 {0,}가 0회 이상 일치하여 패턴이 빈 문자열과 일치할 수 있다는 것입니다. 대신 "{1,}" 또는 " "와 같이 한 번 이상 일치하는 수량자를 사용해야 합니다.

또한 문자열의 각 단어를 일치시키려면 정규식을 반복적으로 적용해야 합니다. , 이전 일치 이후의 위치에서 매번 검색합니다. 이는 문자열을 반복하는 regex_search가 포함된 루프를 사용하여 달성할 수 있습니다.

수정된 코드:

다음은 필요한 변경 사항을 구현하는 수정된 코드입니다.

#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main()
{
    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;
}

이 코드는 정규식을 문자열에 반복적으로 적용하고 일치하는 각 단어를 공백으로 구분하여 출력합니다. 출력은 다음과 같습니다.

first second third forth

위 내용은 C의 `std::regex`를 사용하여 문자열에서 여러 단어를 효율적으로 추출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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