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

[도서 정리] 3. 문자 집합으로 찾기 - 손에 잡히는 10분 정규 표현식

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

3. 문자 집합으로 찾기 - 손에 잡히는 10분 정규 표현식



* 여러 문자 중 하나와 일치시키기


-

모든 문자가 아니라 특별한 문자와 일치하는 것을 찾고 싶을 때 정규식에서는 메타 문자인 대괄호( [] ) 를 사용해 문자 집합을 표현한다.

대괄호는 문자 집합을 정의한다.

대괄호 안에 있는 문자는 모두 집합의 구성원이 되며, 집합에 속한 문자 가운데 하나가 일치한다.

집합에 속한 문자가 모두 일치할 필요는 없다.



-

정규식이 제대로 동작하는지 알아보는 일은 까다로울 수 있다.

얻고자 하는 결과의 패턴이 일치하는지 확인하는 일은 매우 쉽지만, 진짜 도전 과제는 얻고 싶지 않은 결과도 일치하는지 확인하는 일이다.



-

문자집합은 흔히 대소문자를 구별하지 않고 검색하거나 검색할 부분의 특정 영역만 대소문자를 구별하지 않을 때 사용한다.

대소문자를 구별하지 않고 모든 문자를 찾아도 된다면, 이런 기술은 필요 없다.

이런 식의 검색은 부분적으로 대소문자를 구별하지 않을 때만 사용한다.


ex) [CcAaTt]





* 문자 집합 범위 사용하기


-

정규식을 사용할 때, 0~9, A~Z 같이 문자들의 범위를 지정하는 일이 자주 있음을 알게 될 것이다.

문자 범위를 단순하게 만들 때 정규식에서는 특별한 메타 문자인 하이픈(-)을 제공한다.



-

A-Z 는 A부터 Z사이에 있는 모든 대문자와 일치

a-z 는 a부터 z사이에 있는 모든 소문자와 일치

A-F 는 A부터 F사이에 있는 대문자와 일치.

A-z는 아스키(ASCII) 문자 A 와 아스키 문자 z 사이에 있는 모든 문자와 일치 (이 패턴은 사용하지 않도록 하자. Z 와 a 사이에 속하는 아스키 문자 중에는 여는 대괄호( [ ) 와 캐럿 ( ^ ) 같은 문자도 포함됨)



-

아스키 문자 가운데 아무거나 두 개를 선택해 한 범위의 시작과 마지막을 표시할 수 있지만, 실제 사용할 때는 숫자 전체를 범위로 정하기도 하고, 일부만 정하기도 한다.

마찬가지로 영문자도 일부만 범위로 지정하기도 하고 전체를 지정하기도 한다.



-

범위를 지정할 때는 두 값 중 더 큰 값이 앞에 나오면 안 된다

예를 들어 [3-1]처럼 말한다.

이렇게 하면 동작하지 않는다.

또한 패턴 자체가 동작하지 않을 수도 있다.



-

하이픈(-)은 대괄호( [] ) 안에서만 메타 문자인 특수한 메타 문자다.

집합 밖에서 하이픈( - ) 은 단순히 문자 그대로 하이픈 ( - ) 과 일치한다.

그래서 집합 밖에서는 하이픈 문자에 굳이 역슬래시를 붙일 필요가 없다.





* 제외하고 찾기


-

문자 집합은 일반적으로 찾고 싶은 문자의 목록을 정하는 데 쓰지만, 찾을 때 제외하고 싶은 문자 목록을 정할 때도 쓸 수 있다.

다른 말로, 여기서 지정한 목록을 제외하기 라고 할 수 있다.



-

몇 개만 빼고 대부분의 문자를 포함해야 할 경우에는 패턴이 너무 길어지므로 원하는 원하는 문자를 모두 나열하기보다는 캐럿( ^ ) 문자를 써 제외할 문자 집합을 지정한다.



-

[^0-9] 는 정해진 범위 내에 있는 숫자와 일치하지 않는다.

캐럿문자는 이 문자 바로 뒤에 있는 문자나 범위뿐만 아니라 집합 안에 있는 문자나 범위를 모두 제외한다.





* 요약


-

메타 문자인 여는 대괄호 ( [ ) 와 닫는 대괄호 ( ] ) 는 문자 집합을 정의하는데, 그 집합 구성원 중에 한 문자라도 일치해야 한다.(AND 가 아닌 OR다.)

문자 집합은 문자를 일일이 열거하거나 하이픈(-) 문자를 사용해 범위를 설정할 수 있다.

또 캐럿(^) 문자는 지정한 문자들을 제외한 어떤 것들과 일치시킨다.





반응형

댓글