정규 표현식 ?
정규 표현식(Regex)은 특정 패턴을 가진 문자열을 찾거나, 변경하는데 사용할 수 있는 일종의 문법입니다. 예를 들어, 이메일 주소 형식이나, 전화번호 형식, IP 형식과 같은 특정 규칙을 가진 문자열을 찾을 때 정규 표현식을 사용할 경우 매우 간단하게 특정 패턴을 매칭시켜 특정 문자열을 찾을 수 있습니다.
정규 표현식 기본 문법
정규 표현식은 아래와 같은 몇 가지 기본 문법만 익히면 금방 사용할 수 있습니다.
- 패턴 그대로 매칭하는 경우 : 찾고 싶은 단어 또는 문자열을 그대로 입력합니다. 예를 들면 "사과"라는 패턴은 특정 문자열에서 "사과"를 찾아낼 수 있습니다.
- 메타 문자 및 수량 한정자를 사용하는 경우 : 메타 문자는 특별한 의미를 가지며, 특정 문자 집합이나 문자열의 반복 횟수를 나타냅니다. 예를 들어 '\d+' 는 하나이 이상의 숫자, 'a{3}' 은 'a' 가 연속으로 세 번 반복됨을 의미합니다.
- 그룹 및 전방/후방 탐색 : 괄호를 사용해 패턴의 일부를 그룹화하거나 특정 패턴 전후에 문자열이 존재하는 지 확인할 수 있습니다. 예를 들어 '(ab)+c' 패턴은 "ab" 뒤에 "c"가 하나 이상 반복되는 문자열과 매칭됩니다.
정규 표현식 메타 문자
메타 문자 | 의미 | 예제 | 설명 |
^ | 문자열의 시작 | ^hello | "hello"로 시작하는 문자열 |
$ | 문자열의 끝 | world$ | "world"로 끝나는 문자열 |
\b | 단어 경계 (단어 시작이나 끝) | \bcat\b | "cat"이라는 단어만 매칭 (catnip, category는 매칭되지 않음) |
\B | 단어 경계가 아닌 곳 | cat\B | "category", "catnip" 등 "cat"이 단어의 일부로 포함된 경우 매칭 |
\s | 공백 문자 (탭, 줄바꿈 등) | \sworld | 공백 뒤에 "world"가 오는 문자열 |
\S | 공백 문자가 아닌 문자 | \Shello | 공백이 아닌 문자 뒤에 "hello"가 오는 문자열 |
\d | 숫자 | \d{3} | 세 자리 숫자 |
\D | 숫자가 아닌 문자 | \D+ | 숫자가 아닌 문자열 |
\w | 단어 문자 (알파벳, 숫자, 언더스코어) | \w+ | 단어 (예: hello, world123) |
\W | 단어 문자가 아닌 문자 | \W+ | 단어가 아닌 문자열 (예: !@#$%) |
. | 임의의 한 문자 (줄바꿈 문자 제외) | a.c | "abc", "aec", "a c" 등 a와 c 사이에 임의의 한 문자가 있는 문자열 |
\ | 정규식 상의 특별한 의미를 가지는 문자들을 해당 문자 그대로 사용하고자 할 때 사용하는 문자 | \^ | “^” 문자 그대로를 의미 |
[] | 문자 집합 (대괄호 안의 문자 중 하나) | [abc] | "a", "b", "c" 중 하나 |
[^] | 부정 문자 집합 (대괄호 안의 문자를 제외한 문자 중 하나) | [^abc] | "a", "b", "c"를 제외한 모든 문자 |
정규 표현식 수량 한정자
수량 한정자 | 의미 | 예제 | 설명 |
? | 0회 또는 1회 반복 | colou?r | "color" 또는 "colour" |
* | 0회 이상 반복 | \d* | 숫자가 0개 이상인 문자열 |
+ | 1회 이상 반복 | \w+ | 단어 문자가 1개 이상인 문자열 |
{n} | n회 반복 | \d{4} | 네 자리 숫자 |
{n,m} | n회 이상 m회 이하 반복 | \w{3,5} | 단어 문자가 3개 이상 5개 이하인 문자열 |
정규 표현식 그룹 및 전/후방 탐색
패턴 | 의미 | 예제 | 설명 |
그룹 | 패턴의 일부를 그룹화 | (ab)+ | "ab"가 하나 이상 반복되는 문자열과 일치 |
전방 탐색 | 특정 패턴 뒤에 오는 문자열 확인 | hello(?=world) | "hello"뒤에 "world"가 오는 문자열 매칭 |
후방 탐색 | 특정 패턴 앞에 오는 문자열 확인 | (?<=hello)world | "hello"가 앞에 있는 "world"와 일치 |
정규 표현식 사용 예제
- 이메일 주소 검증 : ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
- 전화번호 추출 : \d{2,3}-\d{3,4}-\d{4}