지난 회에서는 드라이브명을 빼고 그 뒤의 문자열만 추출했습니다. 이때 드라이브명은 문자열의 앞(정규식 표현으로는 후방)에 있으므로 후방 탐색을 사용했습니다. 이제 나머지 문자열에서 파일명만 따로 빼야 합니다. 어떻게 해야 할까요?

“드라이브명이 후방에 있는데 반해 파일명은 전방에 있으니까 전방탐색을 사용하면 되지 않을까?”

과연, 대단하십니다. 정답입니다. 문제는 패턴입니다. 정규식을 작성할 때는 그 전제로 패턴의 파악이 무엇보다 중요합니다. 문자열의 패턴을 알아야 정규식을 작성하든가 말든가 할테니까요.

그런데 디렉토리나 파일이나 사실 패턴이 같습니다. 둘 다 영문자, 숫자, 언더바, 몇 가지의 특수문자 등으로 구성되며 확장자가 있을 수도, 없을 수도 있습니다. 결국 이 둘을 구분하는 방법은 하나뿐입니다.

주어진 문자열에 파일명이 포함되어 있는 게 확실한 경우는 문자열의 가장 나중에 나타나는 백슬래시(\) 다음의 문자열이 파일명입니다. 주어진 문자열에 파일명이 포함될 수 있고 아닐 수도 있다고 한다면 사실상 이 둘을 구분하는 것은 불가능합니다. 가령 c:\abc라는 문자열에서 abc는 디렉토리가 될 수도 있고 파일이 될 수도 있습니다. 물론 프로그래밍 언어에서라면 이런 고민은 애초에 할 필요가 없습니다. 주어진 문자열 경로가 디렉토리인지 파일인지를 판별하는 함수를 쓰면 되니까요.

여기서는 주어진 문자열에 파일명이 포함되어 있다고 가정하겠습니다. 따라서 문자열의 가장 나중에 나타나는 백슬래시를 찾은 다음 그 뒤의 문자열을 후방 탐색 처리하면 됩니다. 아래와 같겠네요.

(?<=[a-zA-Z]:).+\\(?=.+)

두 번째 괄호 안에 있는 것이 후방 탐색입니다. 이때 쓰인 기호 ?=가 후방 탐색 메타문자고요. 울트라 에디트에 아래와 같은 문자열들을 입력한 뒤 위의 정규식으로 검색하면 제대로 찾는 것을 볼 수 있습니다.

c:\windows\system32\abc.dll
c:\data\abc.dll
d:\images\web\common.gif

그럼 파일명만 추출하는 것은 어떻게 될까요? 생각하기에 따라서는 무지하게 쉬울 수도, 무지하게 어려울 수도 있습니다. 여기서 힌트는 파일명이 문자열의 가장 끝 부분에 위치한다는 점입니다. 즉, 문자열이 어떤 패턴에 의해서 끝나면 됩니다. 답은 다음 회에 알려드리죠.

List of Articles
번호 제목 글쓴이 날짜 조회 수
29 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 19669
28 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 10647
27 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 10757
26 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 12577
25 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 33229
24 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 11517
23 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 73582
» 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 26632
21 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 15138
20 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 12067
19 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 103396
18 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 11518
17 정규표현식 017. 하위 표현식 2 마라톤맨 2012-01-27 9852
16 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 11583
15 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 10527
14 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 14096
13 정규표현식 013. 검색할 위치 2 마라톤맨 2012-01-16 10401
12 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 10737
11 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 23356
10 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 14829