토탈 커맨더의 정규 표현식
작성자 : 이상호(lyster235@naver.com)
토탈 커맨더의 도움말 중 정규 표현식 부분을 번역했습니다. 상업적인 목적이 아니라면 자유롭게 사용할 수 있습니다.
[정규 표현식(Regular expressions)]
정규 표현식은 매우 강력한 탐색 툴이다. 매우 복잡한 형태의 문자열을 찾을 수 있다. 정규 표현식은 전문가들이 주로 사용하지만, 사무실에서 특정한 문서를 찾는데도 유용하다.
토탈 커맨더는 다음 기능들에 정규 표현식을 지원한다.
- 파일명과 파일내용의
탐색
- Lister의 탐색기능
- 다중 파일명 변경 도구
- 파일 선택
정규 표현식은 일반 문자와 특수 문자(또는 메타 문자)로 구성된다. 다음 문자들은 메타 문자이거나 그 시작 부분이다
메타 문자: . \ ( ) [ ] { } ^ $ +
* ? - (- 는 문자 클래스 내에서만 가능)
일반 문자: 위 메타 문자를 제외한 문자
예) test - 탐색 대상에서 "test"라는 문자열을 찾는다.
▶ 제어 문자(Escape Sequences, 특수 문자) - \로 시작하며, 아래와 같이 사용한다.
\t 탭(Tab) - 탭키를 누른 것과 같은
기능
\xnn 헥사코드 nn으로 나타낸 문자 - 예) \x20은 공백
문자
문자 테이블(charmap.exe)은 대부분의 특수 문자 등에 대한 문자 코드를 보여준다.
- charmap.exe는 98 등에서는 설치시 선택해야 한다.
윈도우 계산기의 공학용 모드에서 10진수(F6)를 16진수(F5)로 바꿀 수 있다.
\[ 왼쪽 대괄호 - 대괄호([)가 메타 문자이므로 해당 문자열에서 [를 찾으려면 \[를 해야
한다.
\\ 백슬래쉬 - 메타 문자는 모두 \ 뒤에 사용한다.
\. .(Period, 점)
▶ 문자 클래스
[ ]로 감싼 문자들을 문자 클래스라고 하며, 이 클래스는 해당하는 특정한 한 문자에 대응된다. -(Hyphen)은 그룹을 지정하는데 사용하며, 시작부분의 ^(Carrot)은 문자 클래스에 지정되지 않는 문자를 찾을 때 사용한다. 예)
[a-z] a 부터 z 까지의 문자
[aeiou] 나열된 모음 중 하나의
문자
[^aeiou] 모음 이외의 모든 문자
M[ae][iy]er Mayer, Meyer, Maier,
Meier
※ 참고 : [a-z]는 a부터 z사이의 어떤 문자에나 대응된다는 것이며, [0-9]도 마찬가지이다.
▶ 메타 문자 - 매우 중요한 메타 문자들
^ 문장 시작
$ 문장 끝
. 아무
문자에나 대응
\w 글자(알파벳), 숫자, _
\W \w에 속하지 않는 문자
\d
숫자
\D 숫자가 아닌 문자
\s 문자 구분자(스페이스, 탭 등)
\S 문자 구분자가 아닌 문자
\b 문자의 경계를 찾는다(\s와 \S의 결합)
\B \b의 반대
※ 참고: 한글은 글자로 인식되지 않기 때문에 \w를 사용할 수 없고, \W나 .를 사용해야합니다.
▶ 반복자
반복자는 반복자 왼쪽에 위치한 한 문자나 표현식의 반복을 나타내는 데 사용된다.
* 0번 이상의 반복
+ 1번 이상의 반복
{n} 정확히 n번 반복
{n,} 적어도 n번 반복
{n,m}
n번 이상, m번 이하 반복
모든 연산자들은 욕심쟁이(greedy)다. 연산자는 자신들이 취할 수 있는 최대한의 문자들에 대응되려고 한다. 연산자 뒤에 ?를 쓰면 연산자를 욕심쟁이가 아니게 만들 수 있다. 즉, 필요한 만큼의 문자들과 대응된다.
예) "b+"는 목적 문자열 "abbbbc"에서 "bbbb"와 대응된다. 그러나 "b+?"는 "b"와 대응된다.
※ 참고: 문자 뒤의 ?는 {0,1}과 같은 의미
▶ 선택
선택은 ( )로 둘러쌓이며 |로 각각이 구분된다. (OR 연산자)
예) (John|James|Peter) - John, James, Peter 중에 하나를 찾는다.
▶ 탐색+치환을 위한 부분식
( )로 둘러쌓인 문자들은 부분식처럼 사용된다.
예) "제목 - 연주자.mp3"를 "연주자 - 제목.mp3" 형식으로 변환.
검색 문자: (.*) - (.*)\.mp3
변경 문자: $2 - $1.mp3
여기서 $1는 첫번째 ()안의 텍스트를 뜻하고, $2는 두번째 ()안의 텍스트를 뜻한다.
부분식은 $1~$9까지 사용가능
▶ 후방 참조
\n - n번째 부분식에 대응된 문자들 ($n과 같은 의미)
예) (.+)\1+ - abab를 찾는다. 첫번째 ab는 .+에 대응되며, 두번째 ab는 \1+에 대응된다.
▶ 변경자
변경자는 정규 표현식의 행동을 바꾸는 데 사용된다.
(?i) 대소문자를 무시. 토탈 커맨더에선, 파일명을
찾는 경우엔 이것이 기본값이다.
(?-i) 대소문자를 구별해서
찾는다.
(?g) 욕심쟁이 모드로 바꾼다(기본값).
(?-g) 욕심쟁이 모드를 끈다. 그래서 "+"는 "+?"를 뜻하게 된다.
나머지 변경자(modificator)는 토탈 커맨더에겐 의미가 없다. 왜냐하면 토탈커맨더는 오직 한 줄
탐색만 지원하기 때문이다.
토탈 커맨더는 Andrey V. Sorokin이 만든 공개된 델파이 라이브러리인 TRegExpr을 사용한다 - http://regexpstudio.com/ - 위의 설명 중 일부는 이 라이브러리의 도움말을 참조했다.
응용 예)
RAR 압축파일 선택: .*\.(rar|[0-9][0-9])$
또는 .*\.r(ar|\d{2})$
위 정규식은 *.rar, *.r00, *.r01,
... , *.r99까지 선택
참고로 제가 압축 파일에 색을 지정하기 위해 사용하는 정규식
.*\.(zip|arj|lzh|rar|alz|bz2|tar|tgz|gz|7z|pak|cab|ace|(a|c|r|z|\d)\d{2})$
HTML 파일 선택: .*\.html{0,1}$ 또는 .*\.html? 또는 .*\.htm(|l)$
위의 식으로 *.htm, *.html 선택 가능
정규 표현식에 대해 관심이 많으시면 이 책을 한 번 보세요.
http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200303040023
여기에 꽤 다양한 자료들이 모여있습니다.
http://www.ezdoum.com/stories.php?story=02/05/19/5810629
그리고 정규 표현식은 리눅스 유저들이 많이 사용하므로, http://kldp.org에 가보면 유용한 정보를 얻을 수 있습니다.
압축파일 선택