>  기사  >  백엔드 개발  >  C++에서 정규식을 사용하여 텍스트 구문 분석

C++에서 정규식을 사용하여 텍스트 구문 분석

PHPz
PHPz원래의
2023-08-22 14:58:43949검색

C++에서 정규식을 사용하여 텍스트 구문 분석

C++에서 정규식을 사용하여 텍스트 구문 분석

정규식은 텍스트 패턴을 일치시키고 검색하기 위한 강력하고 유연한 도구입니다. C++에서는 정규식 라이브러리를 사용하여 텍스트를 구문 분석할 수 있습니다.

C++의 정규식 라이브러리에는 std::regex와 Boost.Regex라는 두 가지 주요 선택 사항이 있습니다. 두 라이브러리 모두 유사한 인터페이스와 기능을 제공합니다. 그러나 다르게 구현되기 때문에 경우에 따라 성능 차이가 발생할 수 있습니다. Boost.Regex는 일반적으로 더 빠르고 정확한 옵션으로 간주되지만 Boost 라이브러리를 사용해야 합니다.

이 글에서는 std::regex 라이브러리를 사용하여 C++에서 텍스트를 구문 분석하는 방법을 소개합니다. 다양한 정규식 구문을 사용하여 텍스트를 일치시키고 추출하는 방법을 몇 가지 예를 통해 보여 드리겠습니다.

예제 1: 기본 텍스트 일치

이 예에서는 "hello"가 포함된 문자열을 일치시킵니다.

#include <iostream>
#include <regex>
 
int main() {
    std::string text = "hello world!";
    std::regex pattern("hello");
 
    if (std::regex_search(text, pattern)) {
        std::cout << "Match found!" << std::endl;
    } else {
        std::cout << "Match not found." << std::endl;
    }
 
    return 0;
}

이 간단한 프로그램은 std::regex_search() 함수를 사용하여 "hello" 문자열이 텍스트에 존재하는지 검색합니다. 일치하는 항목이 발견되면 프로그램은 "일치하는 항목을 찾았습니다."를 출력하고, 그렇지 않으면 "일치하는 항목을 찾을 수 없습니다."를 출력합니다. std::string 및 std::regex 클래스를 사용하고 정규식을 문자열로 regex 개체에 전달했습니다.

예 2: 메타 문자 사용

정규 표현식의 메타 문자는 특별한 의미를 지닌 문자를 나타냅니다. 다음은 가장 일반적으로 사용되는 메타 문자와 그 의미입니다.

  • . 모든 문자와 일치합니다.
  • ^은 문자열의 시작과 일치합니다.
  • $는 문자열의 끝과 일치합니다.
  • d는 숫자와 일치합니다.
  • w 단어 문자(문자, 숫자 또는 밑줄)와 일치합니다.
  • s는 공백 문자(공백, 탭 등)와 일치합니다.

아래 예에서는 "hello"로 시작하는 모든 문자열을 일치시킵니다.

#include <iostream>
#include <regex>
 
int main() {
    std::string text1 = "hello world!";
    std::string text2 = "world hello!";
    std::regex pattern("^hello");
 
    if (std::regex_search(text1, pattern)) {
        std::cout << "Match found in text1!" << std::endl;
    }
 
    if (std::regex_search(text2, pattern)) {
        std::cout << "Match found in text2!" << std::endl;
    }
 
    return 0;
}

이 예에서는 메타 문자 "^"를 사용하여 "hello"로 시작하는 문자열을 일치시킵니다. 첫 번째 텍스트 "hello world!"에서 정규식과 문자열은 모두 "hello"로 시작하므로 프로그램은 "Matchfound in text1!"을 출력합니다. 두 번째 텍스트 "world hello!"에서 정규식은 문자열의 시작 부분과 일치하지 않으므로 프로그램은 아무것도 인쇄하지 않습니다.

예 3: 수량자 사용

정규 표현식의 수량자는 패턴 일치 수를 지정합니다. 다음은 가장 일반적으로 사용되는 수량사와 그 의미 중 일부입니다.

    • 이전 패턴과 0회 이상 일치합니다.
    • 이전 패턴을 한 번 이상 일치시킵니다.
  • ? 이전 패턴과 0번 또는 1번 일치합니까?
  • {n}은 이전 패턴과 정확히 n번 일치합니다.
  • {n,}은 이전 패턴과 최소 n번 일치합니다.
  • {n,m}은 이전 패턴과 최소 n회 일치하지만 m회 이하입니다.

아래 예에서는 수량자 "+"를 사용하여 하나 이상의 숫자와 일치시킵니다.

#include <iostream>
#include <regex>
 
int main() {
    std::string text1 = "1234";
    std::string text2 = "a1234";
    std::regex pattern("\d+");
 
    if (std::regex_search(text1, pattern)) {
        std::cout << "Match found in text1!" << std::endl;
    }
 
    if (std::regex_search(text2, pattern)) {
        std::cout << "Match found in text2!" << std::endl;
    }
 
    return 0;
}

이 예에서는 정규식 "d+"를 사용하여 하나 이상의 숫자를 일치시킵니다. 첫 번째 텍스트 "1234"에서 정규식은 전체 문자열과 일치하므로 프로그램은 "텍스트1에서 일치 항목을 찾았습니다!"를 출력합니다. 두 번째 텍스트 "a1234"에서 정규식은 숫자 하위 문자열 "1234"에만 일치하므로 프로그램은 "Matchfound in text2!"를 출력합니다.

예 4: 그룹화 사용

정규 표현식의 그룹화를 사용하면 패턴을 하위 패턴으로 분할하고 일치 시 그 중 하나만 고려할 수 있습니다. 그룹화는 괄호를 사용하여 표현됩니다. 아래 예에서는 "hello" 또는 "world"가 포함된 문자열을 일치시킵니다.

#include <iostream>
#include <regex>
 
int main() {
    std::string text1 = "hello";
    std::string text2 = "world";
    std::string text3 = "hello world!";
    std::regex pattern("(hello|world)");
 
    if (std::regex_search(text1, pattern)) {
        std::cout << "Match found in text1!" << std::endl;
    }
 
    if (std::regex_search(text2, pattern)) {
        std::cout << "Match found in text2!" << std::endl;
    }
 
    if (std::regex_search(text3, pattern)) {
        std::cout << "Match found in text3!" << std::endl;
    }
 
    return 0;
}

이 예에서는 정규식 "(hello|world)"를 사용하여 "hello"와 "world"를 두 그룹으로 그룹화합니다. 첫 번째 텍스트 "hello"에서 정규식은 첫 번째 그룹에만 일치하므로 프로그램은 "Matchfound in text1!"을 출력합니다. 두 번째 텍스트 "world"에서 정규식은 두 번째 그룹에만 일치하므로 프로그램은 "Matchfound in text2!"를 출력합니다. 세 번째 텍스트 "hello world!"에서 정규식은 첫 번째 또는 두 번째 그룹과 일치하므로 프로그램은 "Matchfound in text3!"을 출력합니다.

요약

이 글에서는 C++에서 정규식을 사용하여 텍스트를 구문 분석하는 방법을 소개했습니다. 메타문자, 수량자, 그룹화 등 가장 일반적으로 사용되는 정규식 구문 중 일부를 자세히 설명합니다. 이 예제가 정규식을 사용하여 텍스트 데이터를 처리하는 방법을 더 잘 이해하는 데 도움이 되기를 바랍니다.

위 내용은 C++에서 정규식을 사용하여 텍스트 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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