정규표현식 007. 메타문자 2

조회 수 13319 추천 수 0 2012.01.08 15:01:23

마침표는 어떤 문자와도 매치가 된다고 말씀드렸습니다. 다만 단 하나의 글자와만 매치됩니다. 또 없는 글자와는 매치될 수가 없습니다. 없는 글자라니? 이게 뭔 소리? 하시겠죠. 그런데 검색을 하다 보면 그런 경우가 종종 있습니다. 예를 볼까요? 이메일 주소를 보면 골벵이 문자 뒤에 도메인이 들어가는데 이 도메인은 abc.com처럼 점이 하나만 들어갈 수도 있지만 abc.def.com처럼 둘이 들어갈 수도 있지요. 이에 관한 정규식을 단계적으로 살펴보겠습니다.


[\w]+@[\w]*\.\w+


우선 골벵이 앞, 즉 아이디(또는 계정)에 해당하는 정규식부터 뜯어보겠습니다. 대괄호 안에 \w라고 되어 있습니다. 이 메타문자는 영문자(대소문자 포함)와 숫자 그리고 밑줄문자(_)를 의미합니다. 따라서 [\w][\w][\w]라는 정규식은 abc, def, 123, a3c, d_e 등과 일치합니다. 그런데 아이디 역시 이 문자들로 구성됩니다. 다만 사이트에 따라서는 시작하는 글자만은 반드시 영문자여야 하는 경우도 있습니다. 저희 머니북 사이트가 그렇습니다. 회원가입할 때 쓰는 아이디 칸에 보면 영문자로 시작하라고 주석이 달려 있습니다. 따라서 위의 정규식을 사용하게 되면 이러한 경우의 아이디는 제대로 걸러지지 않으므로 수정이 불가피합니다.


아이디의 글자수도 유동적입니다. 따라서 [\w][\w][\w] 같은 식으로 표기할 수 없습니다. 이때 바로 마침표가 사용됩니다. 한 글자 이상이기만 하면 되니까요. 결국 [\w]+@는 ‘영숫자나 밑줄문자가 한 글자 이상 계속되다가 골벵이 문자를 만날 것’이라는 의미입니다.


자, 앞서 나온 문제부터 해결하죠. 영문자로만 시작하되 그 이후는 영숫자와 밑줄문자로 이루어진 문자열은 정규식으로 어떻게 될까요? 사실 지금까지 배운 것만 갖고도 해결될 수 있습니다. 답부터 말씀드리면,


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


위와 같이 됩니다. 이를 풀어서 설명드려 봐야 사족이 될테니 생략합니다. 다만,


abc@def.ghr

1abc@def.ghr.com

sdfsdfsd.abc@def.ghr.com


울트라 에디트에 위의 3줄을 입력해 놓고 [a-zA-Z][\w]+@라는 정규식으로 검색할 경우 아래처럼 찾습니다.


abc@def.ghr

1abc@def.ghr.com

sdfsdfsd.abc@def.ghr.com


빨간색으로 표기된 게 검색 결과입니다. 뭔가 이상하죠? 2번째 줄은 숫자로 시작하고 있으니 못 찾아야 했는데 말입니다. 사실 이는 정규식 앞에 ^ 기호만 붙이면 간단히 해결됩니다. 즉,


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


이렇게 말입니다. 여기서 메타문자 ^는 문자열의 처음을 의미합니다. 문자열이 여러 줄로 이루어져 있는 경우라면 각 줄의 처음을 의미합니다. 따라서 2번째 줄은 숫자로 시작하고 있으니 위의 정규식에서 보자면 자격미달입니다.


3번째 줄도 좀 이상하죠? 맨 앞 문자부터 골벵이까지 다 검색되었어야 했을 것 같은데 말입니다. 하지만 정규식대로라면 이는 당연한 결과입니다. 점(.)은 영숫자나 밑줄이 아니니까 말입니다. 따라서,


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


위처럼 정규식을 고치게 되면 3번째 줄도 제대로 검색하게 됩니다. 근데 으으윽~ 갑자기 골에서 이상한 소리가... 아무래도 오늘은 이만 쉬어야겠네요.


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