아스키(ASCII) 코드와 문자 클래스
앞서 배운 정규표현식의 문자 클래스([ ])에서 우리는 문자 클래스([ ])에 개별 문자들을 하나하나 기입하지 않고 다음의 경우처럼 범위로 제시할 수 있었다.
[A-Z], [a-z], [0-9], [A-Za-z], [A-Za-z0-9]
그러면서 이런 생각을 해봤을 가능성이 있다. 구태여 [A-Za-z]라고 하지 않고 [A-z]라고 하면 대문자 A부터 소문자 z까지 모든 알파벳 대소문자를 다 대표할 수 있지 않을까?
왜 알파벳 대소문자를 의미하는 문자 클래스를 구태여 [A-Za-z]라고 [A-z]하지 않는 이유를 알려면 아스키(ASCII) 코드를 보아야 한다.
우리가 사용하는 정규표현식의 문자 클래스는 아스키(ASCII) 코드를 이용하고 있다. 이 아스키(ASCII) 코드의 간단한 구성은 다음의 표와 같다.
10진수 |
16진수 |
문자 |
비고 |
0~31번 |
0x00~0x1F |
NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL, BS, HT, LF, VT, FF, CR, SOH, SI, DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB, CAN, EM, SUB, ESC, FS, GS, RS, US |
제어문자 |
32번 |
0x20 |
Space |
공백 |
33~47번 |
0x21~0x2F |
! " # $ % & ' ( ) * + , - . / |
구문기호 및 심볼 |
48~57번 |
0x30~0x39 |
0~9 |
숫자 |
58~64번 |
0x3A~0x40 |
: ; < = > ? @ |
구문기호 및 심볼 |
65~90번 |
0x41~0x5A |
A~Z |
알파벳 대문자 |
91~96번 |
0x5B~0x60 |
[ \ ] ^ _ ` |
구문기호 및 심볼 |
97~122번 |
0x61~0x7A |
a~z |
알파벳 소문자 |
123~126번 |
0x7B~0x7E |
{ | } ~ |
구문기호 및 심볼 |
127번 |
0x7F |
DEL |
제어문자 |
아스키(ASCII) 코드에는 0에서 127까지 총 128개의 문자가 있고 이 중 65~90번 까지가 A~Z의 알파벳 대문자이고, 중간에 구문기호 및 심볼이 91~96번까지 들어가 있으며 그 뒤에 다시 97번~122번까지 a~z로 알파벳 소문자가 나온다. 만일, 문자 클래스로 [A-z]라고 하면 실은 아스키(ASCII) 코드 65번~122번까지 아우르는 것이므로 원치 않는 구문기호와 심볼까지 포함하는 문자 클래스가 되기 때문에 [A-z]라고 쓰지 않는 것이다.
정규표현식의 문자 클래스([ ])가 아스키(ASCII) 코드를 인식하므로 해당 문자의 16진수 코드값을 대괄호 안에 넣어서 문자 클래스를 만들 수 있다. 즉, 원하는 문자를 문자 클래스로 묶을 때, 이제까지는 대괄호[ ] 안에 원하는 문자를 입력하여 문자 클래스로 묶었지만 해당 문자의 16진수 아스키(ASCII) 코드값을 알고 있다면 문자 대신 코드값을 넣어 해당 문자를 대괄호 안에 넣어서 문자 클래스를 만들 수 있다.
가령, 대문자 A는 아스키(ASCII) 코드에서 65번이고 16진수로는 0x41이다. 이를 문자 클래스에 16진수로 표기할 때는 x 앞에 숫자 0을 제거하고 역슬래쉬(\)를 붙여 x가 문자가 아닌 16진수를 나타내기 위한 기호라는 것을 나타내면서 다음과 같이 작성한다.
[\x41] = [A]
그 외에 몇 가지 사례는 다음과 같다.
[\x00] = NUL(제어문자)
[\x61-\x7A] = [a-z]
키보드를 눌러서 나타낼 수 있는 문자들은 아스키(ASCII) 코드를 일일이 알고 쓸 필요는 없지만 제어문자는 키를 눌러서 표시하기 어려우므로 정규표현식으로 이에 접근하려면 해당 제어문자의 16진수 코드값을 알아야 해서 매우 번거롭다.
이런 불편함을 해소하기 위해 POSIX 문자 클래스는 필요한 문자열 집합들을 제시하고 있으므로 이를 응용하면 조금 더 수월하게 정규표현식을 나타낼 수 있게 된다.
Anki 파일
아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다.
'Anki로 공부하기 > vi 또는 vim 익히기' 카테고리의 다른 글
038 vim의 정규표현식(11) 확장 정규 표현식 1 (0) | 2018.06.24 |
---|---|
037 vim의 정규표현식(10) POSIX 문자 클래스 2 (0) | 2018.06.20 |
035 vim의 정규표현식(8) POSIX 문자 클래스 1 (0) | 2018.06.18 |
034 vim의 정규표현식(7) 몇 가지 예제들 (0) | 2018.06.17 |
033 vim의 정규표현식(7) 반복 (0) | 2018.06.16 |