1. Reuglar Expression 개념
정규표현식에 대해 알아봅시다. 먼저 위키피디아에 적혀있는 정규표현식의 개념은 아래와 같다.
" 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어"
쉽게 말해 문자열의 검색, 치환, 추출을 위한 하나의 패턴이라고 생각하면 된다.
주로 프로그래밍 언어와 문서편집기 등에서 쓰인다.
여담으로 나는 Snort 룰 설정에 정규표현식이 사용되어 공부하는 것이다. 꼭 알아야 함
언어별, 프로그램별로 조금씩 규칙의 차이점이 있지만 거의 비슷하다.
<((https?|ftp|file)://|(docs|www|ftp).)[-a-zA-Z0-9+&@#/%?=~_|$!:,.;]*[a-zA-Z0-9+&@#/%=~_|$]> 14 |
위와 같이 생겨먹은게 정규표현식이다. 진짜 극혐;;; 정규표현식 자체가 CRLF를 허용하지 않아서
한줄에 저렇게 다 적어야 한다. 토쏠리게 복잡하다.
하지만 정규표현식을 사용하지 않으면 문자열 처리를 수행하려면 더 복잡해진다.
어쩔 수 없이 필수불가결하게 사용된다.
너무 복잡하고 헷갈리지만 우리는 이미 정규표현식을 쓰고 있었다.
printf("Hello world\n");
저기서 \n.. 라인피드 문자가 바로 정규표현식의 이스케이프문자이다.
regex (=정규표현식, 귀찮으니까 저렇게 쓰겠다)는 언어마다 문법이 조금씩 다르다.
크게 구분되는 것은 POSIX와 PCRE이다.
2. Regular Expression 분류
regex는 크게 2가지로 분류할 수 있다. POSIX 표준과 PCRE
- POSIX (Portable Operation System Interface)
UNIX 시스템 기반의 regex이다. 이녀석이 표준으로 지정되어 있음.
간단하고 배우기 쉬우며, 처리속도가 빠르지만 패턴이 복잡해지면 성능저하가 일어난다.
- PCRE (PERL Compatible Regular Expression)
POSIX에서 확장된 Perl 방식의 정규표현식이다.
매우 빠른 속도에 다양한 표현식을 제공한다.
대부분의 언어들이 PCRE를 지원하므로, 실무에서는 PCRE를 사용하는 것이 적합하다.
(Snort도 PCRE를 사용한다.)
- 그 외 Regular Expression
Vim, Emacs 등에서 사용되는 정규표현식도 별도로 존재한다.
정규표현식에서 사용되는 여러가지 문자들에 대해 알아봅시다.
1. 반복 메타문자
https?
'?'앞의 하나의 문자가 없거나 한번만 반복하는 것을 찾는다.
즉, http 나 https 를 찾는 것이다. '?' 앞에 하나만 본다는거 까묵지말자
kim+
'+'앞의 문자 하나가 한번 이상 반복되는 것이 매칭된다.
즉, kim+니까 kim, kimm, kimmm 이 매칭된다.
dong*
'*'앞의 문자 하나가 없거나 한번 이상 반복되는 것이 매칭된다.
'+'는 하나 이상은 있어야 했고, '*'는 이거 앞에 문자 하나가 없더라도 찾는다.
즉, dong* 해놓으면 dong, dongg은 물론 don 까지 매칭된다.
{n}, {n, p}, {n, }
괄호 안에 콤마를 기준으로 {최소 반복횟수, 최대 반복횟수} 이다.
위 문자들과 동일하게 바로 앞에 한글자를 반복하는 횟수를 지정한다.
2. 매칭 메타문자
^abc
'^' 다음에 오는 문자열로 시작되는 것들을 매칭시킨다. abcd, abcdde ..
abc$
'$' 이전에 오는 문자열로 끝나는 것들을 매칭시킨다. edfabc, dddabc ...
즉, "^$" 라고 돼있으면 빈줄을 의미한다.
.a
라고 돼있으면 . 자리에 오는 문자가 들어가는 뭐든 간에 매칭된다. babc, dda ..
단, NewLine은 제외된다.
[ xyz ]
x, y, z 중 한글자와 매칭
[ a-z ]
a에서 z사이에 있는 한문자와 매칭
[ B-Pk-y ]
B에서 P까지 또는 k에서 y사이 한문자와 매칭
[ a-z0-9 ]
소문자나 숫자 중의 한문자와 매칭
[ ^b-d ]
b에서 d사이 문자를 제외한 모든 문자를 나타냄
(d|f)ood
우리가 기존에 알던 그대로 d또는 f가 들어간 것과 매칭한다.
(f . .) (b . .)
매치되는 하나의 문자열 즉, 객체를 구분지어준다.
3. 이스케이프 기호
이스케이프 기호는 적혀있는대로.. 딱히 설명할게 없다.
우리가 늘 사용하던 \n, \t 등이 여기에 해당한다.
4. 탐색 플래그
추가로 x는 공백을 말함.
m은 쉽게 말해 다중행
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
어셈블리어 - MOV 명령어 (0) | 2021.04.17 |
---|---|
어셈블리어 개요 (0) | 2021.04.17 |
리얼모드 메모리 주소 표기 (0) | 2021.04.17 |
악성코드의 종류 (0) | 2021.04.16 |
스트림 암호 (Stream Cipher) (0) | 2021.04.16 |