일단 지난 회 숙제의 답부터 알아보겠습니다.

[^\\/\n]+$

위 정규식이 답입니다. 어떤 패턴에 의해서 끝나는 문자열이라고 했는데 그 패턴이라는 게 실은 ‘특정 문자들을 제외한 나머지 문자들’입니다. 여기서는 백슬래시와 슬래시, 줄바꿈 기호입니다. 아시다시피 백슬래시는 윈도우즈 계열, 슬래시는 유닉스나 리눅스 계열에서 사용되는 파일, 디렉토리 구분자입니다.

줄바꿈 기호가 들어간 게 약간 의아하실 것입니다. 하지만 여기서는 꼭 들어가야 합니다. ‘무언가를 제외한다’고 하면 그 무엇 외에는 모든 게 다 포함되는 법입니다. 따라서 줄바꿈 기호도 기본적으로는 포함되기 때문에 제외해야 하는 것입니다. 아무튼 위의 정규식은 ‘백슬래시와 슬래시, 줄바꿈 기호를 제외한 글자들이 하나 이상 이어지다가 그 글자들로 끝나는 문자열’이란 의미가 됩니다. 드라이브명부터 시작하는 전체 경로에는 콜론이나 백슬래시, 슬래시 등도 들어가지만 이것 자체로 끝나게 되면 파일명이 아닌 것으로 판단하는 것입니다.

오늘도 숙제를 하나 내어드리겠습니다. 전체 파일 경로에서 파일의 확장자만 추출하는 정규식입니다. 답은 다음 회에 알아보고 오늘은 위의 제목에 해당하는 강의를 하도록 하죠.

어느 에디터, 어느 워드프로세서나 찾기와 바꾸기 기능은 갖고 있습니다. 뿐만 아니라 몇 가지 옵션도 제공하는데 그중 대표적인 것이 ‘모든 단어 일치’와 ‘대소문자 일치’입니다. 단어 일치는 예전에 설명드린 정규식의 ‘단어 경계’와 같은 맥락이니까 오늘은 대소문자 일치를 갖고 얘기해 보겠습니다.

대소문자 일치는 말 그대로입니다. Car라는 단어를 찾고자 할 때 car로도 찾고 Car로도 찾고 싶다면 대소문자 일치 옵션을 해제시켜야 합니다. 반대로 이 옵션을 선택했다면 정확히 Car라고 입력할 때만 찾게 되겠지요.

정규식의 패턴에서도 이 옵션은 기본으로 제공됩니다. 정규식의 패턴 문자열 앞에 ‘(?i)’라고 넣어주면 됩니다. 한번 해볼까요?

Car car caR cAr

위의 문자열을 입력합니다. 어디다? 그거야 물론 웹브라우저의 부가기능 ‘Regular Expression Tester’지요. 아, 참 익스플로러는 아닙니다. 이 넘은 이제 웬만하면 쓰지 말자구요. 도대체 뭣 때문에 이런 열등한 넘을 계속 써야 하냐구요. 은행(우리은행은 제외)이나 국세청 같이 시대에 뒤떨어진(뒤떨어져도 한참 뒤떨어진) 사이트들을 이용할 때야 할 수 없지만요. 암튼 파이어폭스에 있는 ‘Regular Expression Tester’ 창을 열고 ‘Search Text’ 박스에 입력합니다. 물론 울트라 에디티 등을 이용해도 상관 없습니다.

그런 다음 정규식 입력창에 ‘(?i)car’라고 친 뒤 Test 버튼을 누릅니다. 만약 ‘Global’ 옵션이 선택되어 있다면 Car car caR cAr의 4 단어가 모두 매치되는 것을 볼 수 있을 것입니다. ‘case sensitive’ 옵션이 선택되어 있다 해도 결과는 마찬가지입니다. 이 옵션보다 정규식의 옵션이 우선하는 모양입니다. 이는 울트라 에디트에서도 마찬가지입니다.

정규식에서의 옵션은 이밖에도 몇 가지가 더 있습니다만 정규식 엔진마다 조금씩 다르기 때문에 상세히 설명드리긴 좀 어렵습니다. 말 나온 김에 다른 정규식 엔진, 특히 자바스크립트의 정규식에 대해 설명드려야 할 것 같습니다. 아무래도 웹상에서는 자바스크립트를 가장 많이 쓰게 될테니 말입니다.

울트라 에디트나 파이어폭스 또는 아래아한글 등의 부가기능 혹은 찾기 바꾸기 기능 등을 통해 정규식을 다루는 데는 한계가 있을 수밖에 없습니다. 주어진 텍스트에 하나의 정규식 패턴을 적용시키는 방법 외에는 없기 때문입니다. 반면 자바스크립트나 php, c, 자바, 펄, 루비, 파이썬 등의 프로그래밍 언어상에서 정규식을 다루게 되면 오직 인간의 상상력과 응용력만이 한계일 뿐입니다. 프로그래밍 언어 자체에서 제공하는 제어문들과 수많은 문자열 함수 등이 정규식을 든든하게 받쳐주니 말입니다.

여기서 그 많은 정규식 엔진들을 모두 다룰 수는 없습니다. 사실은 제가 그럴 실력도 못 됩니다. 물론 이 많은 걸 다 알아서 써먹을 데도 없겠지요. 하지만 자바스크립트에서의 정규식 사용 방법 정도는 충분히 익혀둘 필요가 있습니다. 또 자바스크립트의 정규식을 확실히 정복하고 나면 다른 언어들에서의 정규식도 쉽게 다룰 수 있습니다.

캡처, 역참조, 전방 탐색, 후방 탐색, 조건식 등 공부해야 할 정규식 자체의 문법이 좀 남아 있긴 하지만 일단 자바스크립트의 정규식부터 알아보고 계속하도록 하겠습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
29 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 8713
28 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 4548
27 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 4675
26 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 5317
25 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 6525
24 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 4840
» 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 15939
22 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 9827
21 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 7511
20 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 6313
19 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 52989
18 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 4871
17 정규표현식 017. 하위 표현식 2 마라톤맨 2012-01-27 4017
16 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 5754
15 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 4415
14 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 7628
13 정규표현식 013. 검색할 위치 2 마라톤맨 2012-01-16 4555
12 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 5129
11 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 8894
10 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 7416