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