정규 표현식 ➡️ 문자열에서 패턴 찾는데 사용
✅ 라이브러리: regex
regex_match
✏️ 예시 code
// 문자열이 db-숫자-log.txt 형식인지 확인
regex re("db-\\d*-log\\.txt");
// file_name 이 regex 형식에 맞으면 true, 아니면 false 반환
regex_match(file_name, re);
⭐️ 파리미터
icase
: 대소문자 구별 X
✏️ 예시 code
regex re("[01]{3}-(\\d{3,4})-\\d{4}")
➡️ [01]{3}
: 0 또는 1 이 3번 나타남
➡️ \\d{3,4}
: 숫자가 3-4 번 나타남
➡️ \\d{4}
: 숫자가 4 번 나타남
⭐️ 파리미터
smatch
: 매칭된 문자열을 string
형태로 return
cmatch
: 매칭된 문자열을 char*
형태로 return
regex_search
탐색할 문자열에서 정규표현식 패턴을 가진 문자열이 있으면 0, 없으면 1
✏️ 예시 code
regex_search(탐색할 문자열, match, re);
탐색할 문자열=match.suffix();
❗️ match.suffix()
: 문자열에서 검색된 패턴 바로 뒤부터 끝까지의 문자열
끝까지 탐색할 때까지 한번 찾으면 탐색할 문자열을 match.suffix()
로 갱신해줘야 다음으로 찾으려는 패턴에 부합하는 문자열을 찾을 수 있음
그렇지 않으면 첫번째로 패턴을 만족하는 문자열만 계속 출력됨
⭐️ regex_iterator
➡️ 정규표현식을 만족하는 문자열 쭉 뽑아내기
✏️ 예시 code
regex_iterator(탐색할 문자열.begin(), 탐색할 문자열.end(), re);
regex_replace
✏️ 예시 code
sk-circle1
➡️ 1-sk-circle
형태로 변환// 형변환을 할 숫자부분 괄호로 묶어주기
regex re(R"r(sk-circle(\d))r");
// 괄호로 묶은 부분을 옮겨줄 위치 $1로 표기
regex_replace(치환 대상 문자열, re, "$1-sk-circle");
sk-circle1 sk-circle
➡️ 1-sk-circle
형태로 중첩 변환sk-circle
을 아예 날려줘야하기 때문에 숫자 이외의 문자열 전체를 변환 대상으로 설정해야 함// 1. 형변환을 할 문자열 전체 괄호로 묶어주기
// 2. 형변환을 할 숫자부분 괄호로 묶어주기
regex re(R"r((sk-circle(\d) sk-circle))r");
// 문자열 전체에 대한 괄호: $1, 숫자에 대한 괄호: $2
// $1은 아예 삭제할 문자열이기 때문에 날려버리고 $2는 형변환 해서 붙여줄 숫자이기 때문에 문자열 맨 앞에 붙이는 형식
regex_replace(치환 대상 문자열, re, "$2-sk-circle");
❗️$1
과 $2
는 괄호가 열린 순서대로 오름차순으로 매기는 것
[]
: 문자 클래스[A-Z]
: A 부터 Z 중에 하나를 포함[abc]d
: ad, bd, cd[^]
: 부정 ex) [A-Z]
: A 부터 Z 를 포함하지 않음^
: 문자열이나 행의 처음$
: 문자열이나 행의 끝*
: 0개 이상의 문자 포함 ex) a*b
: a 와 b 사이에 0개 이상의 문자 포함{m,n}
: m 회 이상, n 회 이하로 문자 포함 ex) a{1,3}b
: a 를 1번 이상, 3번 이하 포함?
: 0-1 회 문자 포함{n}[문자 or 숫자]
: 문자 n 회 포함{min,}[문자 or 숫자]
: 문자 min
번 이상 포함