정규표현식(Regular Expression)
이번 포스팅은 정규표현식에 대해 하겠습니다. 저는 프로그램 코딩을 하면서 알게 된 것은 아니고 Snort때문에 알게 되었습니다.
정규표현식이란
정규 표현식(regular expression, regex) 혹은 정규식이라고 부릅니다. 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어입니다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있습니다. 텍스트 편집기 뿐만 아니라 프로그램 안에도 구현해 놓은 것들도 볼 수 있습니다.
컴퓨터 과학의 정규 언어로부터 유래하였습니다. 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며, 정규 표현식 자체의 문법도 여러 가지 존재하고 있습니다. 수많은 프로그래밍 언어가 정규 표현식 기능을 제공하고 있습니다. 일부는 펄, 자바스크립트, 루비, Tcl처럼 기본 내장되어 있는 반면 닷넷 언어, 자바, 파이썬, POSIX C, C++ (C++11 이후)에서는 표준 라이브러리를 이용하여 구현합니다. 그 밖의 대부분의 언어들은 라이브러리를 통해 정규식을 제공합니다.
주로 패턴(pattern)으로 부르는 정규 표현식은 특정 목적을 위해 필요한 문자열 집합을 지정하기 위해 쓰이는 식입니다. 밑에서 예를 들어 같이 보도록 하겠습니다.
선택
| 를 사용하여 선택을 할 수 있습니다. 예를 들어 apple | banana 라는 식이 있다고 하면 apple과 banana 두 개 중 하나를 선택할 수 있는 것입니다. 선택이고 생각하시면 되는데 원래의 뜻은 apple 또는 banana입니다.
그룹 묶기
( ) 괄호를 사용하면 연산자의 범위와 우선권을 정의할 수 있습니다. 예를 들면 gray|grey와 gr(a|e)y는 "gray"나 "grey" 두 개 모두를 지칭하는 패턴입니다.
양의 지정
? 물음표는 0번 또는 1차례까지의 발생을 의미합니다. 예를 보면 이해하기 더 쉽습니다. 마치 물어보는 것 같은 느낌이 듭니다. 여기에 쓰는게 맞는지 안맞는지를 물어보는 것 같습니다. 예를 들면 colou?r는 color와 colour를 둘 다 일치시킨다.
* 별표는 0번 이상의 발생을 의미합니다. 예를 들면 ab*c는 b가 0번 이상 발생한다는 것을 의미합니다. 따라서 ac, abc, abbc, abbbc 등을 일치합니다.
+ 덧셈 기호는 1번 이상의 발생을 의미합니다. 예를 들면 ab+c가 있다고 하면 b가 1번 이상 발생한다는 것을 의미합니다. abc는 꼭 들어가야 하는 것이고 abc에서 b만 추가 될 수 있다고 생각하면 됩니다. abbc, abbbbc등 1번 이상만 나오면 됩니다. 따라서 ac는 되지 않습니다.
항상 기호 앞에 있는 문자들이 영향을 받습니다. 따라서 잘 해석해야 합니다. 잘못 해석하여 뒤에 있는 것을 먼저 해석한다면 전혀 다른 값이 나올 수 있습니다.
일치
{n} 정확히 n 번만큼 일치시킵니다.
{min, } min번 이상만큼 일치시킵니다.
{min,max} 적어도 min번 이상 일치시키지만 max번을 초과하여 일치시키지는 않습니다.
여기까지가 기본개념으로 이해하시면 될 것 같습니다. 다른 플랫폼에서 사용할 때 어떻게 사용되는지 모르지만 기본 개념만 잡고 있고 사용 원하는 곳의 쓰임을 알면 될 것 같습니다. 정규표현식에 익숙해진다면 매우 유용하게 사용할 수 있을 것 같습니다. 사실 이것보다 더 많은 것들이 있지만 다음에 하도록 하겠습니다.
'IT' 카테고리의 다른 글
리버스엔지니어링이란 무엇인가? (0) | 2017.08.19 |
---|---|
인공지능과 딥러닝에 대해 (0) | 2017.08.16 |
라즈베리파이 SSH 접속 설정 (0) | 2017.08.13 |
클래시로얄 전설상자에 대해 (0) | 2017.08.12 |
VMware에 Cent OS 7 설치 (0) | 2017.08.08 |
댓글