[정규표현식] 문자 집합을 이용한 검색 방법

라이브러리/regex2016. 3. 4. 08:30

 

※ 요약
이번 포스트에서는 문자 집합을 이용한 검색 방법에 대해 알아볼 것이다. 문자 집합은 이전 포스트에서 배웠던 .(마침표)처럼 모든 문자와의 일치가 아닌, 사용자가 원하는 범위의 문자들과 일치시킬 수 있다. 정규표현식에서 문자 집합은 기초적이고 쉬운 내용이지만 상당히 자주 사용되므로 잘 알아둘 필요가 있다.


※ 문자 집합이 필요한 상황

우리는 t로 시작하고 t로 끝나는, 알파벳으로만 이뤄진 네 글자 단어를 찾아야 하는 상황이라고 가정해보자. 이전 포스트에서 배운 내용으로는 정규표현식을 작성할때 "t..t" 밖에 작성을 못할텐데, "t..t"로는 "test"나 "text"처럼 우리가 원하는 값도 찾지만, "t$%t"나 "t-0t"처럼 우리가 찾지 말아야 하는 것도 찾으므로 문제가 된다. 이럴때 문자 집합을 이용하면 간단히 해결된다.


※ 사용 방법
문자 집합은 메타 문자인 [](대괄호)를 이용하여 표현한다.


※ 사용예
아래는 위의 예제를 수정한 것이다. .(마침표) 대신 메타 문자 []를 이용하여 t로 시작하고 t로 끝나는, 알파벳으로만 이뤄진 네 글자 단어들을 찾았다. [] 안의 a-z는 abcdefghijklmnopqrstuvwxyz와 같은 의미로써, a-z와 일치하는 문자를 검색한다는 의미다.


근데 위의 예제는 오직 소문자만 검색하는데, 대문자도 검색하고 싶으면 아래처럼 A-Z도 추가하면 된다.


아래는 0-9을 이용해 2자리로 숫자로만 이뤄진 단어를 검색하는 예제이다. A-Z처럼 숫자도 0-9로 표현할 수 있으며 당연히 알겠지만 0-9는 마찬가지로 0123456789과 같은 의미다.



이번 예제는 위에서 배운 A-Z, a-z, 0-9 범위들을 응용한 16진수 컬러 코드를 찾는 예제이고 문자 집합 [A-Fa-f0-9]를 이용해 6자리 16진수 0 1 2 3 4 5 6 7 8 9 A B C D E F의 범위를 찾는 정규표현식을 작성해봤다. HTML 컬러코드는 6자리 이므로 [A-Fa-f0-9]를 여섯 번이나 반복했는데.. 너무 길지만 원하는 결과를 얻긴 하였다.


위의 예제는 길어도 너무 길다. 나중에 배울 내용이지만 아래처럼 구간을 지정해서 정규식을 작성하면 간단히 할 수 있다.



※ 제외하고 검색

[](대괄호)안에 문자 집합을 표현할때 ^(캐럿)문자를 사용하면 해당 표현식은 제외가 된다. 예제를 보면 이해가 빠를 것이다.

먼저 {1,}은 나중에 배우겠지만 최소 한 글자거나 그 이상이라는 의미고 [^0-9\n]의 의미는 0-9와 \n를 제외한다는 의미다.

고로 [^0-9\n]{1,}의 의미는 0-9와 \n(개행)을 제외한 최소 한 글자 이상의 패턴을 찾으라는 의미이고 결과는 아래와 같다.


※ 사용시 주의사항

1. -(하이픈)을 이용하여 범위를 지정할때는 작은 값이 먼저 와야 한다. [Z-A]나 [9-0]처럼 값을 거꾸로 하면 안된다.

2. ^(캐럿)은 위치에 따라 의미가 달라진다. []안에서는 제외를, []밖에서는 문자열의 시작을 나타낸다.

 

 

 

 


작성자

Posted by 사용자 오뇽

태그

관련 글

댓글 영역

  • 프로필 사진
    화프
    2016.04.05 17:58

    예제를 보니 이해가 정말 잘되네요!

    다음 글이 기대됩니다!!!

  • 프로필 사진
    남남
    2017.04.13 22:49

    덕분에 이해 잘 하고 갑니다~

  • 프로필 사진
    알린이
    2019.11.17 19:43

    설명 너무 좋아요! 혹시 다음글은 연재할 예정이 없으신건가요?