728x90
반응형

1. 문자 집합(character set)


이번에는 어떤 문자든 통하는 . 문자와는 달리, 대괄호([])를 사용하여 문자 집합을 표현해보도록 할 것입니다. 문자 집합의 예를 한번 살펴보고, 문자 집합이 어떤 것인지 한번 생각해봅시다.


Reg. Expression:

f[ie]

Text:

fire
siren
female
finally
apple
airport


위에 쓰인 정규 표현식을 보자면 대괄호로 둘러싸인 i와 e를 한번 보도록 합시다. 여기서 i와 e를 같이 생각하시면 안됩니다. "f 다음에 i 혹은 e라는 문자가 등장하는 경우에" 일치합니다. 즉, 문자 집합 중 하나가 일치해야 하는거죠. 이번에는, 문자 집합의 범위를 사용하여 검색을 해보도록 해봅시다.


Reg. Expression:

...[0123456789]

Text:

abcd.txt
abce.txt
abc0.txt
abcf.txt
abc1.txt
abc2.txt
abc3.txt


매치된 문자열을 살펴보시면, 아무 문자 3개 뒤에 숫자가 등장해야만 매치가 되는 것을 확인하실 수 있습니다. 문자 집합 [0123456789]은 문자에서 저 집합 가운데에 하나라도 속해야만 매치가 되는 것입니다. 그런데, 정규 표현식에서는 이렇게 범위를 지정하는 것을 편리하게 지정하기 위하여 하이픈(-) 이라는 녀석을 제공합니다. 이 녀석을 통해 패턴의 범위를 지정할 수가 있습니다. 예를 들어, [0-9]는 [0123456789]와 같습니다.


Reg. Expression:

...[0-9]

Text:

abcd.txt
abce.txt
abc0.txt
abcf.txt
abc1.txt
abc2.txt
abc3.txt


아까와 결과가 동일하죠? 숫자뿐만 아니라 숫자가 아닌 문자에서도 하이픈을 사용할 수 있습니다. [a-z]나 [A-Z] 같이 말입니다. (영어가 아니더라도 아스키 문자라면 아무것이나 들어갈 수 있음, 범위 지정시 앞에서는 작은 값이 나와야만 함) 예를 들어서, [a-z]는 [abcdefghijklmnopqrstuvwxyz]를 의미합니다. 그리고, 문자 범위 여러개를 문자 집합 하나에 집어넣을 수도 있습니다. [a-zA-Z0-9]와 같이 말입니다. -> [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]


그럼, 이번에는 어느 문자들을 제외하고 문자열을 검색할 수 있을까요? 물론 가능합니다. 정규 표현식에서는 캐럿(^)이라는 특수한 녀석을 제공합니다. 캐럿 문자를 통해 문자 집합을 지정할 수 있습니다.


Reg. Expression:

...[^0-9]\.

Text:

abcd.txt
abce.txt
abc0.txt
abcf.txt
abc1.txt
abc2.txt
abc3.txt


이번에는 아무 문자 3개의 뒤에 0-9가 등장한 경우를 제외한 나머지가 모두 검색이 되었습니다. 여기서 캐럿이 들어간 문자 집합에 들어간 범위들은 모조리 제외됨을 알아두시길 바랍니다. 다음에는 이스케이프(escape)에 대해 알아보도록 하겠습니다. 수고하셨습니다.

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,