-
정규 표현식이란?
정규표현식의 사전적인 의미로는 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어입니다. 주로 Programming Language나 Text Editor 등 에서 문자열의 검색과 치환을 위한 용도로 쓰이고 있습니다. 입력한 문자열에서 특정한 조건을 표현할 경우 일반적인 조건문으로는 다소 복잡할 수도 있지만, 정규표현식을 이용하면 매우 간단하게 표현 할 수 있습니다. 하지만 코드가 간단한 만큼 가독성이 떨어져서 표현식을 숙지하지 않으면 이해하기 힘들다는 문제점이 있습니다.
정규 표현식 방법
정규표현식은 표준인 POSIX의 정규표현식과 POSIX 정규표현식에서 확장된 Perl방식의 PCRE가 대표적이며, 이외에도 수많은 정규표현식이 존재하며 정규표현식 간에는 약간의 차이점이 있으나 거의 비슷합니다. 정규표현식에서 사용하는 기호를 Meta문자라고 합니다. Meta문자는 표현식 내부에서 특정한 의미를 갖는 문자를 말하며, 공통적인 기본 Meta문자의 종류로는 다음과 같습니다.
. ^ $ * + ? { } [ ] \ | ( )
문 자
설 명
예 제
\
다음에 오는 문자를 특수 문자, 리터럴, 역참조 또는 8진수 이스케이프로 표시합니다.
"\\"는 "\"를 찾고 "\("는 "(" 찾습니다.
^
입력 문자열의 시작 부분에서 위치를 찾습니다. ^abc -> abcdef
^a?bc -> bcdef, abcdef
$
입력 문자열의 끝 부분에서 위치를 찾습니다.
t$ -> eat
동$ -> 홍길동
*
앞의 문자나 부분식을 0개 이상 찾습니다.
ab* -> ab, aabb, abb, aaaa
ab*d -> ad, abd, abbbbd
+
앞의 문자나 부분식을 1개 이상 찾습니다.
zo+ -> zo, zoo
?
앞의 문자나 부분식을 0개나 1개 찾습니다.
te?n -> ten, tn
teen(x){n}
n의 수만큼 정확하게 앞글자를 반복합니다.
te{2}n -> teen
{n, m}
n과 m사이의 수만큼 앞글자를 반복
te{1,2}n -> ten, teen
.
New Line을 제외한 모든 글자
.n -> an apple, on the tree
(pattern)
패턴을 체크하고 체크한 값을 변수로 저장
(f..) (b..) -> foo, bar
(?:pattern)
패턴을 체크하고 체크한 값을 변수로 저장하지 않음
(?:f..) (b..) -> bar
(?=pattern)
패턴에 일치하는 문자열이 시작된 위치에서 검색 문자열을 찾습니다.
blah(?=soft|hard) -> blahsoft, blahhard, blah hard(x)
(?!pattern) 패턴에 일치하지 않는 문자열이 시작된 위치에서 검색 문자열을 찾습니다.
blash(?!hard) -> blahsoft, blah soft
x|y
x 또는 y를 찾습니다.
z|food -> z, food
(z|f)ood -> zood, food
[xyz]
문자 집합, 괄호로 묶인 문자 중 하나를 찾습니다.
[abc] -> plain
[^xyz]
음수 문자 집합, 괄호로 묶이지 않는 문자를 찾습니다.
[^a-z] -> I'm a good man, I am A Good Man
[a-z]
문자의 범위. 지정한 범위에서 문자를 찾습니다.
[a-z]{4,} -> She sells sea shells by...
[^a-z]
음의 범위 문자. 지정한 범위에서 있지 않은 문자를 찾습니다.
[^a-z] -> KNOW know
\b
단어와 공백 사이의 위치를 찾습니다. er\b -> naver, verb(x)
\B
\b 를 제외한 전부를 찾습니다.
er\B -> verb, naver(x)
\cx
x로 표시된 제어 문자를 찾습니다.
\cM -> Control-M or 캐리지 리턴 문자를 찾습니다.
\d
숫자를 찾습니다.
== [0-9]
\D
숫자가 아닌 문자를 찾습니다.
== [^0-9]
\f
용지 공급 문자를 찾습니다.
== \xOc, \cL
\n
줄 바꿈 문자를 찾습니다.
== \xOa, \cJ
\r
캐리지 리턴 문자를 찾습니다.
== \xOd, \cM
\s
공백, 탭, 용지 공급 등을 비롯한 모든 공백 문자를 찾습니다.
== [\f\n\r\t\v]
\S
공백이 아닌 문자를 찾습니다.
== [^\f\n\r\t\v]
\t
탭 문자를 찾습니다.
== \x09, \cL
\v
새로 탭 문자를 찾습니다.
== \x09, \cK
\w
밑줄을 비롯한 모든 문자를 찾습니다.
== [A-Za-z0-9_]
\W
비단어 문자를 찾습니다.
== [^A-Za-z0-9_]
\xn
n을 찾는데, 여기서 n은 16진수 이스케이프 값입니다. (ASCII 코드가 정규식에 사용될 수 있습니다.)
\x41 -> A
\x041 -> \x04 & 1
[a-z] : 소문자
[A-Z] : 대문자
[a-zA-Z] : 영문자
[가~힣] : 완성형 한글