[STL] 정규 표현식 (regex)

치치·2025년 6월 30일

STL

목록 보기
13/21
post-thumbnail

코딩테스트를 푸는데, 다른 사람의 풀이 중 regex를 사용한 풀이가 있길래 정리해보았다.

📌 정규표현식 (regex) 이란?

'정규표현식'이란, 문자들의 규칙(패턴)을 정의하는 특수한 문자열이다.

regex = regular expression


📌 정규표현식 기호

기호 / 표현의미 및 설명
.임의의 한 문자 (줄바꿈 제외)
*앞 문자가 0번 이상 반복됨
+앞 문자가 1번 이상 반복됨
?앞 문자가 0번 또는 1번 나타남
\d숫자 (0~9)
\w단어 문자 (영문자, 숫자, 밑줄 _)
\s공백 문자 (스페이스, 탭, 개행 등)
\b단어 경계 (단어의 시작 또는 끝)
[abc]a, b, c 중 하나와 일치
[^abc]a, b, c 이외의 문자와 일치
^문자열의 시작
$문자열의 끝

📌 정규표현식 함수

  • regex_match() : 전체 문자열을 매칭을 통해 정확히 일치하는 지 검사

  • regex_search() : 문자열 검색을 통해 일부분 검사

  • regex_replace() : 다른 문자열로 치환


⭐ 예시

✅ regex_match()

return bool = regex_match(원본 문자열, 정규표현식);


전체 문자열이 정규식과 정확히 일치하는 지 검사하고 일치한다면 true 를 반환한다.

❗ 정규표현식 regex pattern의 의미

regex pattern("[a-z]+\d+")

  1. [a-z]+
    소문자 하나 이상 반복 (+를 추가했기 때문. 기본값은 [a-z])

  2. \d+
    숫자 하나 이상 반복 (+를 추가했기 때문. 기본값은 \d)


❗❗ 문자열 주의 !!

C++에서 문자열 리터럴 "..." 안에 \를 쓰려면, 이스케이프 문자로 인식되지 않게 \ 두 번 써야 한다.

regex 변수 내부에 들어가는 값은 문자열이기 때문에 숫자인 \d를 넣을 때도 \\d로 작성해야한다.

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

int main() 
{
    string s = "abc123";
    regex pattern("[a-z]+\\d+");

    if (regex_match(s, pattern)) // 문자열 s의 정규표현식이 일치한다면
    {
        cout << "전체 일치!"; // 소문자와 숫자로 구성된 문자열인것
    }
}

return bool = regex_search(원본 문자열, 정규표현식);


문자열의 일부분이라도 정규식에 일치하는 부분이 있다면 true 를 반환한다.

string s = "abc123xyz";
regex pattern("\\d+");

if (regex_search(s, pattern)) 
{
    cout << "숫자 존재!";
}

✅ regex_replace()

regex_replace(원본 문자열, 정규표현식, 치환할 문자열);


1. 프로그래머스 - 모음 제거 Lv.0

  1. [aeiou] : a, e, i, o, u 중 어떤 문자라도 일치하는지

  2. + = 앞에 있는 문자 클래스가 1번 이상 반복될 수 있다는 의미.
    ➡ 즉, [aeiou]+로 사용할 경우, 연속된 모음이 한번에 처리된다.


❓ "nice to meet you"로 예를 들어본다면?

  1. [aeiou]로 사용하여 치환했을 경우,
    'i', 'e', 'o', 'e', 'e', 'o', 'u' ➡ 내부적으로 총 7번의 매치가 일어나고 각각 제거된다.

  2. [aeiou]+로 사용하여 치환했을 경우,
    "ieoeeou" 전체를 한 번에 매치한다. (총 1번의 매치)

#include <string>
#include <vector>
#include <regex>

using namespace std;

string solution(string my_string) 
{
    string answer = "";
    regex pattern("[aeiou]+");
    answer = regex_replace(my_string, pattern, "");
    return answer;
}
profile
뉴비 개발자

0개의 댓글