정규표현식 008. 메타문자 3

조회 수 7693 추천 수 0 2012.01.09 12:34:27

지난번에 알아본 정규식은 아래와 같습니다.


^[a-zA-Z][\w.]+@


위 정규식을 풀어보면, ‘영문자 한 글자로 시작한 후 영숫자나 밑줄문자가 한 글자 이상 계속되다가 골벵이 문자로 끝날 것’이라는 의미가 됩니다. 이 의미대로라면 골벵이 앞이 한 글자로 돼 있는, 즉 한 글자로만 이루어진 아이디는 검색하지 못합니다. 물론 실전에서라면 한 글자나 두세 글자짜리 아이디는 허용되지 않습니다. 따라서 이메일 유효성 검사의 앞단에서 이미 체크될 것이므로 문제가 되지 않을 것입니다. 그러나 여기서는 연습 삼아 한 글자 짜리 아이디도 검색할 수 있게 해보겠습니다.


이때 사용하는 메타문자가 *입니다. 지난 회를 시작할 때 없는 문자와도 매치시켜야 할 때가 있다고 했는데 바로 이런 경우입니다.


^[a-zA-Z][\w.]*@


+를 *으로 대치한 식입니다. 이 정규식을 풀어보면 ‘영문자 한 글자로 시작한 후 영숫자나 밑줄문자가 0글자 이상 계속되다가 골벵이 문자로 끝날 것’이라는 의미가 됩니다. 여기서 머리도 식힐 겸 잠시 지금까지 나온 메타문자들을 복습해 보겠습니다. 리뷰, 리뷰, 리뷰~


. : 딱 한 글자와 매치됩니다. 어떤 글자라도 관계 없습니다. 단, 개행문자(\n)는 예외입니다.


+ : 한 글자 혹은 그 이상입니다. 어디까지? 무한대까지입니다.


* : 위와 같으나 글자가 없는 경우도 포함됩니다.


[] : 문자 집합입니다. 여기서 주의할 점은 괄호 안에 아무리 많은 글자가 들어 있어도 결국은 한 글자와만 매치된다는 것입니다. 가령 [abcdefghijklmnopqestuvwxyz]라고 길게 써봐야 결국은 [a-z]와 똑같이 영문 소문자 한 글자입니다.


- : 위의 대괄호 안에서 의미를 갖는 메타문자. 범위를 지정할 때 쓰입니다. [c-f]는 c, d, e, f와 매치됩니다. 숫자에도 사용됩니다. [3-6]은 3, 4, 5, 6과 매치됩니다. 주의할 점이 하나 있습니다. 범위를 지정할 때 큰 숫자나 문자가 앞에 나오면 에러가 난다는 것입니다. 따라서 [7-3]이나 [y-d]처럼 표기하면 안 됩니다.


\d : 숫자 한 글자와 매치됩니다. 이 메타문자는 대괄호 안에서도 똑같은 의미를 갖습니다. 따라서 [\d]\d[\d]는 연속된 3자리의 숫자를 의미합니다.


\D : 숫자가 아닌 글자 하나와 매치됩니다. [^0-9] 혹은 [^\d]와 같은 의미입니다. 이처럼 메타문자에서 영어 대문자와 소문자는 반대의 의미를 가질 때가 많습니다.


\w : 영어 대소문자와 숫자, 밑줄 가운데 어느 한 글자입니다. [a-zA-Z0-9_]와 같습니다.


\W : 위와 반대입니다. 즉 [^a-zA-Z0-9_]와 같습니다.


^ : 대괄호 안에서와 밖에서의 의미가 다릅니다. 우선 안에서는 특정 문자를 제외하는 용도로 쓰입니다. 가령 [^\d]는 숫자를 제외합니다. ‘abcd34efghijk56lmno’라는 문자열에 대해 [^\d][^\d][^\d]라는 정규식으로 검색하면 abc, efg, hij, lmo의 순서대로 찾습니다. 대괄호 밖에서는 문자열의 시작을 의미합니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수
9 정규표현식 009. 메타문자 4 머니북 2012-01-10 6600
» 정규표현식 008. 메타문자 3 머니북 2012-01-09 7693
7 정규표현식 007. 메타문자 2 마라톤맨 2012-01-08 12465
6 정규표현식 006. 메타문자 1 마라톤맨 2012-01-07 9075
5 정규표현식 005. 근데 어디다 쓰는 것인고? 마라톤맨 2012-01-06 6762
4 정규표현식 004. 정규표현식이란? 마라톤맨 2012-01-05 7518
3 정규표현식 003. 맛보기 울트라 수퍼 심화 단계 마라톤맨 2012-01-04 6663
2 정규표현식 002. 맛보기 심화 단계 마라톤맨 2012-01-03 6775
1 정규표현식 001. 맛보기 마라톤맨 2012-01-02 8376