[c++] C++에서의 정규 표현식과 서브매치

정규 표현식(regular expression)은 문자열에서 패턴을 찾거나 검색하기 위한 도구로, C++에서는 라이브러리를 통해 이를 지원합니다. 정규 표현식을 사용하면 문자열에서 특정한 패턴을 찾는 등의 작업을 쉽게 수행할 수 있습니다.

정규 표현식 기본 사용법

C++에서 정규 표현식을 사용하려면 헤더 파일을 포함해야 합니다. 아래는 간단한 예제 코드입니다.

#include <iostream>
#include <regex>

int main() {
    std::string text = "Hello, my email is example@email.com";
    std::regex pattern("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}");

    if (std::regex_search(text, pattern)) {
        std::cout << "Email found!" << std::endl;
    }

    return 0;
}

위 코드에서는 “text” 문자열에서 이메일 주소를 찾기 위한 정규 표현식을 사용하고 있습니다.

서브매치(Submatch)

정규 표현식을 사용하여 패턴을 찾을 때, 매칭된 문자열 중에서 특정 부분을 추출하는 것이 가능합니다. 이를 서브매치(submatch)라고 합니다.

아래는 서브매치를 사용하여 이메일 주소를 찾고, 사용자 이름과 도메인을 추출하는 예제 코드입니다.

#include <iostream>
#include <regex>

int main() {
    std::string text = "Hello, my email is example@email.com";
    std::regex pattern("([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})");
    std::smatch match;

    if (std::regex_search(text, match, pattern)) {
        std::cout << "Email found: " << match.str() << std::endl;
        std::cout << "Username: " << match.str(1) << std::endl;
        std::cout << "Domain: " << match.str(2) << std::endl;
    }

    return 0;
}

위 코드에서는 “match.str(1)”과 “match.str(2)”를 사용하여 각각 사용자 이름과 도메인을 추출하고 있습니다.

결론

C++에서는 라이브러리를 통해 정규 표현식을 사용하고 서브매치를 통해 매칭된 문자열의 특정 부분을 추출할 수 있습니다. 이를 통해 문자열 처리에 유용한 기능을 수행할 수 있습니다.

참고 자료