토탈 커맨더의 정규 표현식

토탈 커맨더의 정규 표현식

작성자 : 이상호(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에 가보면 유용한 정보를 얻을 수 있습니다.


압축파일 선택

 

 

 


P.S.1 - Modificator를 뭐라고 번역해야할까요?
 
P.S.2 - 정규 표현식은 오토마타나 컴파일러를 안 배운 사람에게는 어렵게 느껴질 수도 있습니다.
           그럴 땐 남이 만들어 놓은 식을 그대로 가져다 쓰는 것도 좋은 방법입니다. ^^

위로 스크롤