KOROMOON

착한 사마리아인이 되고 싶습니다.

7/08/2018

정규 표현식 (Regular Expression, 약어로 Regexp 또는 Regex)


( 1 ) 정규 표현식

정규 표현식(Regular Expression, 약어로 Regexp 또는 Regex)이란 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어임.
많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있음.

정규 표현식을 모르면 노가다해야 하므로 왠만하면 숙지하는 게 좋음.

보안장비(IDS, IPS 등) 룰셋은 거의 Snort 룰셋 방식이며 정규 표현식을 알아야 고급 룰을 만듬.

정규 표현식 작업에 쓸만한 Editor 툴 중에 notepad++ 를 추천함.

무료이면서 기능이 많음.
해당 툴의 찾기 기능 단축키는 Ctrl + F 이고 바꾸기 기능 단축키는 Ctrl + H 이며 정규 표현식을 사용하고자 한다면 아래 검색 모드에서 정규 표현식을 체크해야 함.
정규 표현식으로 작업하다가 다시 롤백하고자 한다면 Ctrl + Z 를 누르면 됨.
< notepad++ 툴의 정규 표현식 >

그리고 notepad++ 툴에 정규 표현식을 대신한 공백 제거 기능이 편리하게 들어가 있음.

(편집 -> 공백 기능)
선행 공백 제거, 후행 공백 제거 등이 있음.
참고로 아래 정보는 각 OS 별 개행코드이며 숙지하는게 좋음.
윈도우 : \r\n
UNIX  : \n
MAC   : \r
< notepad++ 툴의 공백 기능 >



( 2 ) 문법

.
임의의 한 문자
s.e
s e 사이에 임의의 한 글자를 갖는 문자열과 일치함.
sae, sbe, sce, sde, ...

.ce
ce 앞에 임의의 한 글자를 갖는 문자열과 일치함.
ace, kce, dce, ...

*
바로 앞의 문자가 없거나 하나 이상
s*e
e 앞에 s 가 없거나 하나 이상 존재하는 모든 문자열을 나타냄.
e, se, see, ssse, ...

abc*
ab 다음에 c 가 없거나 하나 이상 존재하는 모든 문자열을 나타냄.
ab, abc, abcc, abccc, ...

h*im
im 앞에 h 가 없거나 하나 이상 존재하는 모든 문자열을 나타냄.
im, him, hhim, hhhim, ...

+
바로 앞의 문자가 하나 이상
s+e
문자 e 앞에 s 가 최소한 하나 이상 존재하는 모든 문자열을 나타냄.
se, sse, sssse, settle, ...

?
바로 앞의 문자가 없거나 하나
th?e
t e 사이에 h 가 하나 있거나 혹은 없는 문자열과 일치함.
te, the, their, lotte, ...

^
바로 뒤의 문자열로 시작
^The
The 로 시작하는 모든 문자열을 나타냄.
The girl is beautiful, Theater, ... (뒷부분부터 공백까지 검사)

^a?bc
bc abc 로 시작하는 모든 문자열을 나타냄.
bc++ 3.0, abcdef), ...

^.e
e 앞에 한 글자가 존재하는 문자열로 시작하는 모든 문자열을 나타냄.
he, me, request, settle, ...

^s.e?
s 와 임의의 한 문자로 시작하고 그 뒤에 문자 e 가 하나 있거나 혹은 없는 문자열을 나타냄.
sa, sae, sb, sbe, ... (e는 나와도 되고 안나와도 되고)

$
바로 앞의 문자열로 종료
a?bc$
bc 로 끝나는 문자열 앞에 문자 a 가 없거나 하나 존재하는 문자열과 일치함.
eeabe, seebc, bc, ...

t.e$
t 와 임의의 한 글자, 그리고 그 다음에 e 로 연결되어 끝나는 문자열과 일치함.
onthetoe, bctae, appetitte, ...

s?c+$
첫 글자는 s e 로 시작하고 하나 이상의 e 로 끝나는 문자열과 일치함.
e, se, ee, eee, seee, seee, ...

^KOROMOON$
KOROMOON 으로 시작해서 KOROMOON 으로 끝나는 문자열과 일치함.
, 이 경우는 문자열 자체가 KOROMOON 뿐인 경우에만 일치함.
KOROMOON

[]
[] 안에 있는 문자 중 하나, 범위는 '-'로 지정함.
[a-d] [abcd] 와 동일하며 [0-9] [0123456789] 와 같은 의미임.
[ab]cd
acd 또는 bcd 를 포함하는 문자열과 일치함.
acd, tacde, "bcd", "tbcde", ...

^[ab]cd
acd 또는 bcd 로 시작하는 문자열과 일치함.
acds, bcdt, acdsee32, ...

[a-z]
영문 소문자 한 글자를 포함하는 문자열과 일치함.
a0c2ds, ta123cde, Student, ...

[a-zA-Z]
영문 소문자나 대문자 한 글자를 포함하는 문자열과 일치함.
LINUX, 386AT, ...

[0-9]
십진수 한 자를 포함하는 문자열과 일치함.
a0c2ds, ta123cde, 386, ...

ga[a-z]
하나의 영문 소문자 앞에 ge를 갖는 문자열과 일치함.
LINgazUX, gazzett, ...

^ab[ce]ef
abcef 또는 abdef로 시작하는 문자열과 일치함.
abcef0z, abdef386, ...

^[a-zA-Z]
영문자로 시작하는 모든 문자열과 일치함.
LINgazUX, abcef0z, ...

[a-z]+
영문소문자 한 자 이상을 갖는 문자열과 일치함.
tgabcabcef, MySQL, ...

[aA][bB]
ab, aB, Ab, AB를 포함하는 문자열과 일치함.
386ABIT, abcef0z, tgabcabcef, ...

,[a-zA-Z0-9]$
콤마와 하나의 영문자 또는 숫자로 끝나는 문자열과 일치함.
abdef38,6, 199,2, ...

만일 원하지 않는 문자를 제외한 문자를 가리킬 때에는 [] 안의 첫 문자로 ^ 를 사용함.
[^ab]cd
acd bcd 를 제외하고는 패턴 .cd와 같음.
, cd 앞에 a b 를 제외한 하나의 문자를 포함하는 문자열과 일치함.
ccd, scd, 018cd, tgcdcdabcef, gazcd18, ...

s[^ab]t
sat sbt 를 제외하고는 패턴 s.t 와 같음.
, t 앞에 a b 를 제외한 임의의 한 문자와 그 앞에 s 가 있는 문자열과 일치함.
sct, sdt, tgcdsctda28, settle, ...

[^a-z]
영문 소문자를 제외한 한 글자를 포함한 문자열과 일치함.
MySQL, 386sAB,IT, abcef0z, 199,2, ...

[^a-zA-Z]
영문자를 제외한 한 글자를 포함하는 문자열과 일치함.
286sAB,IT, gazscd18, abcef0z, 199,2, ...

[^0-9]
숫자를 제외한 한 글자를 포함하는 문자열과 일치함.
settle, gazscd18, LINUX, ...

{}
{} 앞의 문자나 문자열 출현 횟수
a{2}b
aab 를 가진 문자열과 일치함.
, {2} {} 앞에 있는 문자 a 의 개수가 2 개임을 의미함.
aab, ...

a{2,}b
a 의 개수가 최소한 2 개 이상인 문자열을 포함하는 문자열과 일치함.
aab, aaab, aaaab, ...

a{1,3}b
b 앞에 1 개부터 3 개까지의 a 를 갖는 문자열을 포함하는 문자열과 일치함.
ab, aab, aaab, ...

()
() 안에 있는 문자를 그룹화
a(bc){2}
a 뒤에 bc 의 개수가 두 개인 문자열 abcbc 를 포함하는 모든 문자열과 일치함.
[bc] b 또는 c 중 하나를 의미하는 것에 비해 (bc) bc 를 하나의 그룹으로 처리함.
docabcbctor, tabcbc++, ...

a(bc)*
a 뒤에 bc 가 없거나 하나 이상인 문자열과 일치함.
sea, abcd, abcbcbcbc, ...

|
or 연산자
he|she
he she 를 포함하는 문자열과 일치함.
he is handsome, she's gone, ...

(he|she)is
is 앞에 he she 를 포함하는 문자열과 일치함.
, heis sheis 를 포함하는 모든 문자열과 일치함.
heis, sheis, ...

(le|li)*ft
ft 앞에 le li 가 없거나 하나 이상인 문자열과 일치함.
mlefto, lft, lelift, fclelelilefte, ...

mo(no)+
mo 뒤에 no 가 하나 이상인 문자열과 일치함.
mono, monono, mononono, acmonoe, ...



( 3 ) 특수 문자 사용

^  []  $  ()  |  *  +  ?  {}  \

앞에 \ 붙여서 사용해야 함.

\*+ : * 가 하나 이상 포함된 패턴

\b : 문자와 공백 사이를 의미함.
\d : 순수한 숫자, 정수값, 0-9
\d{2,3}-/d{3,4}-/d{4}  :   전화번호 정규식임. 하이퍼 뒤에 물음표가 있으면(-?) 하이퍼가 있어도 되고 없어도 된다는 뜻임.
\D : \d와 반대 (숫자를 제외한 나머지)
\s : 공백 문자
\S : \s와 반대 (공백 문자를 제외한 나머지)
\t : 탭 문자
\w : [a-zA-Z0-9] 의 줄임표현
\W : [^a-zA-Z0-9] 영문자와 숫자만 아니면 된다는 뜻임.



( 4 ) 플래그


g (Global) : 패턴에 맞는 모든문자 찾기

i (Ignore Case) : 대소문자 무시
m (Multi Line) : 여러 줄




( 5 ) 정규 표현식을 테스트해 볼 수 있는 사이트

http://regexr.com/

http://regexper.com/
http://www.regexpal.com/



참고 사이트 : 

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D
http://www.nextree.co.kr/p4327/
http://www.cbs.dtu.dk/courses/27610/regular-expressions-cheat-sheet-v2.pdf



============================================================

본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기