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

조회 수 12489 추천 수 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
번호 제목 글쓴이 날짜 조회 수sort
29 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 98909
28 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 69041
27 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 31801
26 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 23986
25 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 21556
24 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 15717
23 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 13710
22 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 13461
21 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 12668
» 정규표현식 007. 메타문자 2 마라톤맨 2012-01-08 12489
19 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 11211
18 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 10894
17 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 10340
16 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 10218
15 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 10164
14 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 9543
13 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 9475
12 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 9291
11 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 9239
10 정규표현식 013. 검색할 위치 2 마라톤맨 2012-01-16 9128