정규표현식 017. 하위 표현식 2

조회 수 8334 추천 수 0 2012.01.27 09:34:35

‘둥근 괄호를 쓰면 그 괄호 안의 내용이 그룹화된다’라고 지난번에 말씀드렸습니다. 이는 예제를 보셔야 이해가 되실 것 같습니다.


사장님사장님 우리 사장님


위의 문자열에서 사장님이 2번 반복된 곳이 있습니다. 이것을 찾아내려면 어떻게 해야 할까요? 쉽다고요? 아래처럼요?


사장님{2}


이 정규식대로 하면 사장님이 2번 반복된 곳을 찾을까요? 오, 노! 아닙니다. 위의 정규식을 해석해 보면 ‘사장 다음에 님이 2번 반복되는 문자열’입니다. 즉 ‘사장님님’을 찾습니다. 따라서 매치가 실패로 돌아갑니다. 사실 이는 지금까지 꼼꼼하게 공부해 오신 분이라면 너무도 당연하게 생각하실 얘기입니다. * + {} 등의 메타문자는 모두 그 바로 앞의 한 글자에 대해서만 적용된다고 여러번 말씀드렸거든요.


그런데도 굳이 이처럼 함정 비스무리한 문제를 드린 것은 괄호의 쓰임새 때문입니다. 위의 문제를 올바로 풀려면 다음과 같이 해야 합니다.


(사장님){2}


이렇게 하면 ‘사장님’이라는 문자열이 그룹화되면서 그 다음 메타문자에게 ‘난 한 덩어리야’라고 가르쳐 주게 됩니다. 한번 더 해보겠습니다. 정규식은 연습, 또 연습이니까요.


1910 2010 1823 2011 1784


위의 연도들에서 1900년 이상의 것들만 매치시키려면 어떻게 해야 할까요?


19|20\d{2}


이렇게 정규식을 작성하셨다면 앞서의 실수를 그대로 반복하신 것입니다. 위의 정규식은 이런 의미입니다. ‘19’이거나 ‘20 다음에 숫자 두 자리’. 이는 의도하는 바가 아닙니다. 올바른 정규식은


(19|20)\d{2}


위와 같습니다. 이제 위 정규식의 의미는 ‘19나 20이 오고 그 다음에 두 자리 숫자’가 됩니다.


둥근 괄호를 써서 이렇게 그룹을 지어 놓으면 여러 가지로 쓸모를 갖게 됩니다. 그 대표적인 것이 참조입니다. 이 참조라는 개념이 사실 좀 어렵습니다. 한번에 이해하시는 건 아마 잘 안 될 것입니다. 앞으로 진행될 강좌의 전방 탐색, 역참조 등을 공부하시면서 몸으로 익히시는 게 좀더 쉬울 것 같습니다.


아무튼 개념은 설명 드려야지요? 지금까지는 단순히 문자열을 매치시키는 방법에 대해서만 논해 왔습니다. 즉 일단 매치가 되고 나면 그것으로 끝이었습니다. 하지만 정규식의 진면목은 바로 참조에 있습니다. 참조란 매치가 된 문자열을 무언가에 다시 써먹는다는 뜻입니다. 그 무언가는 여러 가지가 될 수 있습니다. 일단 치환입니다. 치환을 하려면 검색한 결과를 기억하고 있어야 하니 당연히 참조가 필요합니다.


그러나 검색만 하는 경우라도 참조는 필요합니다. 이는 특정 조건 때문입니다. 즉 무조건 찾는 게 아니라 특정 조건에 맞을 때만 맞는 경우입니다.


에구, 자세한 설명은 아무래도 좀 미뤄야 할 것 같네요.


List of Articles
번호 제목 글쓴이 날짜 조회 수sort
29 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 98007
28 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 68171
27 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 31646
26 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 23602
25 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 21313
24 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 15489
23 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 13533
22 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 13305
21 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 12517
20 정규표현식 007. 메타문자 2 마라톤맨 2012-01-08 12361
19 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 11045
18 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 10755
17 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 10209
16 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 10068
15 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 10005
14 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 9416
13 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 9324
12 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 9131
11 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 9097
10 정규표현식 006. 메타문자 1 마라톤맨 2012-01-07 8971