정규표현식 이란?
Regular Expression(정규표현식)은 일종의 문자를 표현하는 공식으로, 특정 규칙이 있는 문자열 집합을 추출할 때 자주 사용되는 기법. 주로 Prograaming Language나 Text Editor등에서 문자열의 검색과 치환을 위한 용도로 사용됩니다. 정규 표현식, 또는 줄여서 regex 특히 텍스트 파일을 처리할 때 텍스트 문자열을 검색하고 조작하는 데 매우 강력합니다. 한 줄의 정규식은 수십 줄의 프로그래밍 코드를 쉽게 대체할 수 있습니다. Regex는 모든 스크립팅 언어(예: Perl, Python, PHP 및 JavaScript)에서 지원됩니다. 뿐만 아니라 Java와 같은 범용 프로그래밍 언어 텍스트 검색을 위한 Word와 같은 워드 프로세서도 있습니다.
자주 쓰이는 대표적인 정규표현식 예제(regex example)에 대하여 알아봅니다.
1. 정규표현식 구문 요약
\ = 백슬래시
1) 문자 (Character)
regex에서 특별한 의미를 갖는 문자를 제외한 모든 문자는 자신과 일치.
정규식 x은 하위 문자열 "x" 와 일치
정규식 9 -> "9"
정규식 = -> "="
정규식 @ -> "@"
2) 특수 정규식 문자 (Special Regex Character
아래 문자는 정규식에서 특별한 의미를 가짐
., +, *, ?, ^, $, (, ), [, ], {, }, |, \.
3) 이스케이프 시퀀스( \char )
정규식에서 특별한 의미를 가진 문자를 일치시키려면 백슬래시(\)와 함께 이스케이프 시퀀스 접두사를 사용.
\. matches "."
regex \+ matches "+"
regex \( matches "(".
regex \\ to match "\"
4) A Sequence of Characters(String)
문자열은 일련의 문자(하위 표현식이라고 함)를 결합하여 일치시킬 수 있습니다.
예를 들어, 정규식 Saturday는 "Saturday". 기본적으로 일치는 대소문자를 구분하지만 modifier 를 통해 대소문자를 구분하지 않도록 설정할 수 있습니다 .
5) OR 연산자( | )
예를 들어 정규식 two|2 는 문자열 "two" 또는 "2"
6) 문자 클래스(또는 대괄호 목록)
[...] : 대괄호 안에 있는 문자 중 하나를 의미
[.-.] (범위 표현식): 범위에 있는 문자 중 하나를 의미
예를 들어 [0-9]모든 숫자와 일치합니다. [A-Za-z]모든 대문자 또는 소문자와 일치
7) 발생 표시기(Repetition Operators)
+ : 하나 이상의 ( 1+), 예를 들어 , 와 [0-9]+같은 하나 이상의 숫자를 의미. 예 '456', '102'
* : 0개 이상( 0+), 예를 들어 [0-9]*0개 이상의 숫자와 일치합니다. [0-9]+빈 문자열과 함께 모든 것을 의미.
? : 0 또는 1(선택 사항), 예를 들어 선택적 , 또는 빈 문자열 [+-]?과 일치 합니다. "+""-"
{m,n} : m~까지 n(둘 다 포함)
{m} : 정확히 m시간
{m,} : m이상( m+)
8) Metacharacters : 문자와 일치
. (점): 개행을 제외한 모든 문자. 와 동일[^\n]
\d , \D : 하나의 숫자/숫자가 아닌 문자. 숫자는[0-9]
\w , \W : 하나의 단어/비단어 문자. ASCII의 경우 단어 문자는[a-zA-Z0-9_]
\s , \S : 하나의 공백/공백이 아닌 문자. ASCII의 경우 공백 문자는[ \n\r\t\f]
9) 위치 앵커 (Position Anchors)
문자와 일치하지 않지만 행 시작, 행 끝, 단어 시작 및 단어 끝과 같은 위치와 일치.
^ , $ : 각각 줄의 시작과 줄의 끝. 예: ^[0-9]$숫자 문자열과 일치.
\b : 단어의 경계, 즉 단어의 시작 또는 끝. 예를 들어, 입력 문자열 \bcat\b의 단어와 일치 합니다. "cat"
\B : \b의 역. 즉, 단어의 시작이 아니거나 단어의 끝이 아님.
\< , \> : 각각 단어의 시작과 끝, 와 유사합니다 \b. 예를 들어, 입력 문자열 \<cat\>의 단어와 일치 합니다. "cat"
\A , \Z : 각각 입력 시작 및 입력 끝.
10) 괄호로 묶인 역 참조
( )역참조를 생성 하려면 괄호 를 사용
$1, $2, ...(Java, Perl, JavaScript) 또는 \1, , ...(Python)를 사용 \2하여 역참조를 순차적으로 검색
2. Regex Example
\ = backslash
1) 핸드폰 번호와 일치하는 정규식 패턴
/(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/
2) 날짜 패턴
(\\d{2}).(\\d{2}).(\\d{4})
3) URL 패턴
(https?)://(www)?.?(\\w+).(\\w+)/?(\\w+)?
4) email 패턴
([a-zA-Z0-9\\_\\-\\.]+)@([a-zA-Z]+).(.+)
5) 한글만 일치 패턴
/^[가-힣]+$/
6) 영문만 일치 패턴
/^[a-zA-Z]+$/
7) 숫자 알파벳 일치 패턴
/^[a-zA-Z0-9]+$/
8) JUMIN증번호 일치 패턴
/^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$/
9) 한글 이름 일치 패턴
/^[가-힣]{2,4}$/
10) 비밀번호 (최소8자리이상, 대문자1개이상, 소문자 1개이상, 숫자1개이상, 특수문자1개이상) 패턴
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}/
정규식 치트 시트 정리문서 다운로드 받기
Download Regex Cheat Sheet