[250107 TIL] 패턴 매칭, 문자열 검색, 치환 등의 작업에 유용한 regex

2025. 1. 7. 20:56·TIL

1️⃣ 알고리즘 코드카타

▪ 문자(char)도 아스키 범위 초과하면 오버플로우 발생
https://school.programmers.co.kr/learn/courses/30/lessons/12926

▪ 스위치 조건문의 조건
정수형 상수값(정수, 문자, 열거형)만 조건으로 사용 가능

https://school.programmers.co.kr/learn/courses/30/lessons/81301

 

2️⃣C++ 복습

▪ 컨테이너의 복사

//둘 다 깊은 복사(컨테이너의 대입 연산은 깊은 복사)

vector<int> vec4(vec3); 
//복사생성자 명시적으로 호출

vector<int> vec4 = vec3
//컴파일러가 내부적으로 복사 생성자 호출

 

1️⃣ 3주차 과제

🔹 좌표 이동 프로그램

C++ 라이브코딩는 너무 오래걸리고...컴파일러 로그도 불친절하군...

에러가 이 화면이면 저장이 안된 것
에러에 dotnet ~ 뜨면

https://dotnet.microsoft.com/ko-kr/download/dotnet/thank-you/sdk-6.0.428-windows-x64-installer

 

2️⃣ 추가 공부

🔹 regex

상황 : 코드카타 알고리즘 숫자열과 문자열을 regex로 푼 풀이가 있었다.

 

regex : 문자열에서 패턴 매칭, 문자열 검색, 치환 등의 작업을 쉽게 수행 가능

 

#include <regex>

 

1. regex 사용 기본 구조

  • std::regex: 정규 표현식 패턴을 정의.
  • std::regex_match: 문자열이 정규 표현식 전체와 일치하는지 확인.
  • std::regex_search: 문자열 내에 정규 표현식과 일치하는 부분이 있는지 확인.
  • std::regex_replace: 정규 표현식과 일치하는 부분을 치환.

2. 정규 표현식 기초 문법

. 임의의 문자 한 개 a.b → acb, a3b
^ 문자열의 시작 ^abc → abc
$ 문자열의 끝 abc$ → abc
* 0개 이상의 반복 a* → aaa, a
+ 1개 이상의 반복 a+ → aaa, a
? 0개 또는 1개의 반복 a? → a, 빈 문자열
{n} 정확히 n번 반복 a{3} → aaa
{n,} 최소 n번 이상 반복 a{2,} → aa, aaa
{n,m} n번 이상 m번 이하 반복 a{2,4} → aa, aaa
[] 문자 집합 [abc] → a, b, c
` ` OR 연산
\\\\d 숫자 \\\\d+ → 123, 456
\\\\w 알파벳/숫자/밑줄 ([a-zA-Z0-9_]) \\\\w+ → hello_123
\\\\s 공백 문자 (space, tab, newline) \\\\s+ → 공백

 

3. 예시

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

int main() {
    string text = "Hello, my email is example@domain.com.";
    regex pattern("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}");
		//정규 표현식 패턴을 정의하는 객체 생성

    // regex_search로 매칭 검사
    if (regex_search(text, pattern)) {
        cout << "Valid email found!" << endl;
    } else {
        cout << "No valid email found." << endl;
    }
    
    string text = "The phone number is 123-456-7890.";
    regex pattern("\\d{3}-\\d{3}-\\d{4}"); // 전화번호 패턴

    if (regex_search(text, pattern)) {
        cout << "Phone number found!" << endl;
    } else {
        cout << "Phone number not found." << endl;
    }
    
    string text = "My phone number is 123-456-7890.";
    regex pattern("\\d{3}-\\d{3}-\\d{4}");
    string result = regex_replace(text, pattern, "XXX-XXX-XXXX");

    cout << result << endl; // 출력: My phone number is XXX-XXX-XXXX.

    return 0;
}

 

'TIL' 카테고리의 다른 글

[250109 TIL] 상속의 virtual 키워드  (1) 2025.01.09
[250108 TIL] 언리얼 C++ 사용하면서 주의할 점  (0) 2025.01.08
[250106 TIL] 정적/동적 배열과 벡터, 생성자와 소멸자에서 놓쳤던 부분  (0) 2025.01.06
[250103 TIL] 알고리즘 코드카타로 유클리드 호제법, C++ 복습하며 L/RValue 추가 공부  (0) 2025.01.03
[250102 TIL] switch반복문에 열거형 입력  (0) 2025.01.02
'TIL' 카테고리의 다른 글
  • [250109 TIL] 상속의 virtual 키워드
  • [250108 TIL] 언리얼 C++ 사용하면서 주의할 점
  • [250106 TIL] 정적/동적 배열과 벡터, 생성자와 소멸자에서 놓쳤던 부분
  • [250103 TIL] 알고리즘 코드카타로 유클리드 호제법, C++ 복습하며 L/RValue 추가 공부
yoosorang
yoosorang
yoosorang 님의 블로그 입니다.
  • yoosorang
    yoosorang 님의 블로그
    yoosorang
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • 게임 개발 (0)
      • TIL (76)
      • Trouble Shooting (7)
      • Unreal (25)
      • Unity (1)
      • C++ (14)
      • 게임 수학 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    언리얼 데이터테이블
    UnReal
    c++열거형
    UE5
    입력 예외 처리
    troubleshooting
    settimer에러
    위젯바인딩 변수
    언리얼 데이터테이블 C++
    언리얼 스마트 포인터
    cast this null 에러
    위젯 애니메이션
    switch 열거형
    UE
    위젯바인딩
    언리얼 데이터테이블 블루프린트
    Unreal5
    언리얼
    언리얼5
    c++에러
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
yoosorang
[250107 TIL] 패턴 매칭, 문자열 검색, 치환 등의 작업에 유용한 regex
상단으로

티스토리툴바