IT 그리고 정보보안/Knowledge base

정규표현식 (Regular Expression)

plummmm 2021. 4. 17. 09:49
반응형

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