정규표현식은 여러 목적으로 사용된다. 정규표현식 자체는 어렵지 않다.
정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.
< 정규표현식의 정의 : 출처 위키백과 ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D >
이 정규표현식이 참.... 알면 편한데 문자열 파싱 하는 일이 자주 없다 보니 필자는 자주 안 쓰게 된다. 사용법이 헷갈린 것도 있고, 자주 안 보면 까먹기 일수이다. 이번 포스팅에서 내 기억도 살릴 겸 정규표현식에 대해서 정리를 해보고자 한다.
패턴
일단 정규 표현식은 문자열을 표현하는 "패턴"이라는 놈이 존재한다. 즉 이 "패턴"을 가지고 노는 게 정규표현식에서 자유로워야 하는데, 이 "패턴"에는 특정한 의미를 가진 "메타 문자"라는 게 존재한다.(예를 들면 정규표현식에서 점(.)은 New Line을 제외한 모든 한 문자를 의미한다.)
표준 표현법
아래는 POSIX의 기본/확장 문법을 정리한 표이다.
메타문자 | 기능 | 설명 |
. | 문자 | New Line을 제외한 1개의 문자 |
[ ] | 문자 집합 | 대괄호에 써있는 문자중 하나를 선택한다. ex : [abc]d >> ab, ac, ad |
[^ ] | 부정 | 대괄호에 써있는 문자를 제외하고 선택한다. ex : [^abc]d >> 일단 ab, ac, ad는 뺀다. |
^ | 처음 | 처음을 의미한다. ex : ^[asdf] >> a, s, d, f로 시작하는 문자(열) |
$ | 끝 | 끝을 의미한다. ex : $[asdf] >> a, s, d, f로 끝나는 문자(열) |
| | 선택 | 여러 식 중 하나를 선택한다.(파이프다) |
( ) | 하위식 | 식 여러개를 하나로 묶는다. 약간 드모르간인듯 ex : abc|acd == a(b|c)d |
\n | 일치하는n번째 패턴 | 일치하는 패턴 중 n번째 패턴을 의미한다. (New Line이 아니다!) |
* | 0회 이상 | 0개 이상의 문자를 포함한다. ex : a*b >> b, ab, aab, aaab, aaaab 등등 |
+ | 1회 이상 | 1개 이상의 문자를 포함한다. ex : a+b >> ab, aab, aaab, aaaab 등등 |
? | 0또는 1회 | ex : a?b >> b, ab |
{m, n} | m회 이상, n회 이하 | ex : a{1,4}c >> ac, aac, aaac, aaaac |
또한 문자열을 지정할 때 자주 사용하는 정규표현식은 다음과 같다.
* 아래는 POSIX 표준이 아닌 ASCII 식을 첨부한다.(더 활용성이 높다고 생각한다.)
ASCII 표현식 | 설명 |
[A-Za-z0-9] | 영숫자 |
[^A-Za-z0-9] | 영숫자가 아님 |
[\t] | 공백 혹은 탭 |
[\x00-\x1F\x7F] | 제어문자(00은 NULL을 1F는 이스케이프 시퀀스를, 7F는 ASCII Character DEL(? 맞는지 모르겠다.) |
[\x21-\x7E] | 보이는 문자 |
[ \t\r\n\v\f] | 모든 공백문자 |
POSIX란?
POSIX는 portable Operating System Interface의 약어로 서로 다른 UNIX의 공통 API를 정리해서 이식성을 향상하기 위한 IEEE의 표준규격이다. POSIX 규격은 C 언어의 시스템 콜(System Call), 압축 포맷까지 광범위한 범위를 표준 한다. Window도 POSIX 서브시스템과 비슷한 시스템(SUA)을 탑재하고 있어서 POSIX를 만족하는 응용 프로그램이 실행 가능하다.
정규표현식은 거의 모든 에디터나 프로그래밍 언어에서 지원한다. 자유자재로 사용할 줄 아는 게 확실하게 도움이 된다.
'정보보안-이론 > XX에 대하여' 카테고리의 다른 글
CAM Table에 대하여 (0) | 2021.05.14 |
---|---|
OLE에 대하여 (0) | 2021.05.13 |
Cavity Virus에 대하여 (0) | 2021.05.12 |
USBDumper에 대하여 (0) | 2021.05.12 |
ICMPv4에 대하여 (0) | 2021.05.11 |