본문 바로가기
프로그래밍 놀이터/Tips

[도서 정리] 4. 메타 문자 사용하기 - 손에 잡히는 10분 정규 표현식

by 돼지왕 왕돼지 2019. 12. 26.
반응형

4. 메타 문자 사용하기 - 손에 잡히는 10분 정규 표현식



* 이스케이프 다시 살펴보기


-

메타 문자는 정규식 안에서 특별한 의미가 있다.

마침표(.)는 메타 문자로, 어떤 문자든 문자 하나와 일치한다.

이와 유사하게, 여는 대괄호 ( [ ) 도 집합의 시작을 나타내는 메타 문자다.



-

메타 문자들은 정규식에서 특별한 의미가 있으므로 자기 자신을 문자 그대로 표현할 수 없다.

여는 대괄호 ( [ ) 가 여는 대괄호와 일치하지 않고, 마침표(.)가 마침표와 일치하지 않는다.

메타 문자는 그 앞에 역슬래시를 붙여 문자 그대로 해석되게(이스케이프) 할 수 있다.

메타 문자는 모두 이스케이프 할 수 있는데, 그러면 메타 문자로서 지니는 특별한 의미 대신 문자 자체를 뜻하게 된다.





* 공백 문자 찾기


-

[\b] : 백스페이스

\f : 페이지 넘김(form feed)

\n : 줄바꿈

\r : 캐리지 리턴

\t : 탭

\v : 수직 탭



-

\r\n 은 줄바꿈과 캐리지 리턴의 조합으로 윈도우에서 줄 바꿈을 나타내는 데 사용된다.

하지만 유닉스와 리눅스 및 맥 OS X 시스템에서는 단순히 줄바꿈 문자만 사용한다.

이상적인 정규식에서는 \n 이 필수고 \r 은 경우에 따라 처리할 수 있어야 한다.





* 특정한 문자 형태와 일치시키기


-

문자 집합은 검색에서 쓰는 가장 흔한 형태이기에, 자주 쓰는 문자 집합들은 특수한 메타 문자로 대신하기도 한다.

이런 메타 문자들을 문자 클래스(classes of characters)라고 부른다.

직접 찾고 싶은 문자들을 열거하거나 범위를 사용하면 되기 때문에, 실제로 클래스 메타 문자를 써야 하는 경우는 결코 없지만, 일단 사용해 보면 너무나도 유용함을 알게 될 것이다.



** 숫자와 숫자가 아닌 문자 찾기


-

\d : 숫자 하나 ([0-9]와 같다.)

\D : 숫자를 제외한 문자 하나 ( [^0-9] 와 같다. )



-

클래스 메타 문자에서는 소문자와 대문자는 서로 반대임을 뜻한다.

대소문자를 구별하지 않고 검색을 수행할 때도 정규식 문법은 대소문자를 구별한다.

찾으려는 텍스트는 대소문자를 구별하지 않고 텍스트를 찾더라도, \d 같은 특수한 문자는 대소문자를 구별한다.



** 영숫자 문자와 영숫자가 아닌 문자 찾기


-

영숫자(alphanumeric) 문자로, 대문자와 소문자를 포함한 알파벳 A부터 z, 숫자, 밑줄을 포함한다.


\w : 대소문자와 밑줄을 포함하는 모든 영숫자 ( [a-zA-Z0-9_] 와 같다. )

\W : 영숫자나 밑줄이 아닌 모든 문자 ( [^a-zA-Z0-9_] 와 같다. )



** 공백 문자와 공백이 아닌 문자 찾기


-

\s : 모든 공백 문자 ( [\f\n\r\t\v] & white space 같다. )

\S : 공백 문자가 아닌 모든 문자 ( [^\f\n\r\t\v] & ^white space 와 같다. )

( 백스페이스 메타 문자인 [\b] 는 포함되지 않는다. )



** 16진수나 8진수 표현하기


-

16진수 값은 앞에 \x 를 붙여 표시한다.

\x0A 는 줄바꿈 문자가 되며 \n 과 기능이 같다.

(돼왕: \xNN 의 format 이며 NN 은 정확히 두자리이다. )



-

8진수 값은 두 자리나 세 자리 정수 앞에 \0 을 붙여 표시한다.

\011 은 탭 문자이며, \t 와 기능이 같다.

(돼왕: 8진수 값은 variation 이 많다. 지원/미지원부터 \ 이후 0 필수, 자릿수 등등 )

(돼왕: unicode 는 \uNNNN format 이며 NNNN 은 네자리이다.)



-

많은 정규식에서 \c 문자를 이용해 컨트롤 문자를 표현한다.

\cZ 는 Ctrl - z 와 일치한다.

실제로는 거의 쓸 일이 없는 문법이다.





* 포직스 문자 클래스 사용하기


-

포직스 문자 클래스는 줄여 쓰기를 나타내는 또 다른 형태인데, 많은 정규식에서 지원한다.

( 자바스크립트는 지원하지 않는다. )



-

[:alnum:] : 모든 영숫자 ( [a-zA-Z0-9] 와 같다. )

[:alpha:] : 모든 영문자 (  [a-zA-Z] 와 같다. )

[:blank:] : 빈칸(space)이나 탭 문자([\t])와 같다.)

[:cntrl:] : 아스키 제어 문자 (아스키 0번부터 31번, 127번)

[:digit:] : 모든 한 자리 숫자 ( [0-9] 와 같다. )

[:graph:] : [:print:] 와 동일하나 빈칸(space) 제외

[:lower:] : 모든 소문자 ( [a-z] 와 같다. )

[:print:] : 출력 가능한 모든 문자

[:punct:] : [:alnum:] 이나 [:cntrl:] 가 포함되지 않은 모든 문자

[:space:] : 빈칸을 포함한 모든 공백 문자 ( [\f\n\r\t\v] & white space d와 같다. )

[:upper:] : 모든 대문자 ( [A-Z] 와 같다. )

[:xdigit:] : 모든 16진수 숫자 ( [a-fA-F0-9] 와 같다. )





* 요약


-

특정 문자(탭이나 줄바꿈 등)나 전체 집합 혹은 문자 클래스(숫자 하나나 영숫자 문자)와 일치하는 메타 문자가 있다.

이렇게 메타 문자와 포직스 클래스는 정규 표현식 패턴을 단순하게 만든다.




반응형

댓글