( 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) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
댓글 없음:
댓글 쓰기