1. regex란?

regex는 문자열에서 특정 패턴을 찾는 기능이다.

//예를 들면: 
숫자가 있는지
전화번호 형식인지
이메일 형식인지
특정 문자 제거
//같은 작업을 쉽게 할 수 있다.

//사용 헤더
#include <regex>

 

 

2. regex 기본 구조

// 기본형태
regex 패턴변수("정규표현식");

// 예시
regex pattern("[0-9]+");

// 의미
숫자가 1개 이상 반복되는 패턴

 

 

3. 가장 중요한 함수 3개

함수 의미
regex_match() 문자열 전체 검사
regex_search() 문자열 안 일부 검색
regex_replace() 문자열 치환

 

  • regex_match()
    - regex_match()는 문자열 전체가 패턴과 일치하는지 검사한다. 즉, 문자열 전체를 확인한다.
    //기본 형태
    regex_match(문자열, 패턴)
    의미: 문자열이, 패턴과 일치하냐? => 결과는 true, false로 나온다.
    ​
     
  • // 예제 #include <iostream> #include <regex> using namespace std; int main() { string s = "12345"; regex pattern("[0-9]+"); // 숫자가 1개 이상을 의미 if(regex_match(s, pattern)){ cout << "숫자만 있는 문자열"; } else{ cout << "숫자가 아닌 문자가 포함됨"; } } // 출력: 숫자만 있는 문자열 ​
  • regex_search()
    - regex_search()는 문자열 안에 특정 패턴이 포함되어 있는지 검사한다. 문자열 일부만 일치해도 true가 나온다.
    // 기본 형태
    regex_search(문자열, 패턴)
    의미: 문자열 안에 패턴과 일치하는 부분이 있어? => 결과는 true, false로 나온다.
    
     regex_match() 와 차이점
    함수 검사방식
    regex_match() 문자열 전체 검사
    regex_search() 문자열 일부 검색
  • // 예제 #include <iostream> #include <regex> using namespace std; int main() { string s = "abc123"; regex pattern("[0-9]+"); if(regex_search(s, pattern)){ cout << "숫자가 포함되어 있음"; // 실행결과: 숫자가 포함되어 있음 } else{ cout << "숫자가 없음"; } }

 

  • regex_replace()
    - regex_replace()는 특정 패턴을 다른 문자열로 변경한다. 문자 제거, 공백 제거 등에 자주 사용된다.
    //기본형태
    regex_replace(문자열, 패턴, 바꿀문자열)
    의미: 문자열 안에 패턴과 일치하는 부분을 바꿀문자열로 변경 => 결과는 변경된 값
    
    // 예제
    
    #include <iostream>
    #include <regex>
    
    using namespace std;
    
    int main() {
    
        string s = "abc123def";
    
        regex pattern("[0-9]+");
    
        string result = regex_replace(s, pattern, "");
    
        cout << result; // 실행결과 : abcdef
    
    }
    

 

4. 자주 사용하는 정규표현식 문법

정규표현식은 보통 문자 범위반복 조건을 조합해서 사용한다. 예를 들어 [0-9]+는 숫자가 1개 이상 반복되는 패턴을 의미한다.

구분 문법 의미 예시
문자 범위 [0-9] 숫자 1개 1, 5, 9
문자 범위 [a-z] 소문자 1개 a, b, z
문자 범위 [A-Z] 대문자 1개 A, B, Z
문자 범위 [a-zA-Z] 영어 알파벳 1개 a, B, z
문자 범위 [가-힣] 한글 1글자 가, 나, 힣
반복 표현 + 1개 이상 반복 [0-9]+
반복 표현 * 0개 이상 반복 [0-9]*
반복 표현 {3} 정확히 3개 [0-9]{3}
반복 표현 {2,4} 2개 이상 4개 이하 [0-9]{2,4}
축약 표현 \\d 숫자 [0-9]와 같음
축약 표현 \\s 공백 띄어쓰기, 탭
기타 . 아무 문자 1개 a.c → abc, a1c
  • 사용 예시
    regex pattern("[0-9]+");
    // 숫자가 1개 이상
    
    regex pattern("[a-zA-Z]+");
    // 영어 알파벳이 1개 이상
    
    regex pattern(R"(010-\\d{4}-\\d{4})");
    // 010-숫자4개-숫자4개
    
    regex pattern("a.c");
    // a와 c 사이에 아무 문자 1개
    // 예: abc, axc, a1c


5. 주의할 점

\d, \s처럼 역슬래시가 들어간 표현은 C++ 문자열에서 아래처럼 \\를 한 번 더 써야 한다.

regex pattern("\\d+");

// 하지만 R"()"를 사용하면 더 깔끔하게 작성할 수 있다.
regex pattern(R"(\d+)");

 

 

 

 

6. 최종 요약

regex는 문자열에서 특정 패턴을 찾거나 검사하거나 변경할 때 사용하는 기능이다. 핵심 함수는 3가지이다.

함수 역할
regex_match() 문자열 전체가 패턴과 일치하는지 검사
regex_search() 문자열 안에 패턴이 일부라도 있는지 검사
regex_replace() 패턴과 일치하는 부분을 다른 문자열로 변경

 

// 정리하면 다음과 같다.
regex_match()   // 전체 검사
regex_search()  // 부분 검색
regex_replace() // 문자열 치환

+ Recent posts