그때 그때 생각나는 유용한 정규식을 소개해보려고 한다.

 

오늘은 그 첫 포스팅이다^^ 물론, 이 카테고리는 정규식 기본은 어느 정도 배웠다고 여기고 진행한다.

 

"성이 정이요 이름은 규식씨?"식으로 갸우뚱 하는 분은 정규식 이야기나 삽질중독재활센터 읽고 오시기 바란다.

 

또, 나 역시 정규식은 언제나 배우는 입장이다. 정규식에 정답이란 없다. 정규식은 단순한 skill이 아니라 art라고 했다. 나도 틀릴 수 있고 정규식의 달인이라 해도 틀릴 수 있다. 또, art이기 때문에 그 누구도 정답이라고 우길 수 없다.

 

그냥 모두 알량한 skill을 자랑하지 말고 겸손한 artist가 되면 그만이다. 

 

참 세상 좋아졌다.

 

예전엔 이런 거 생각도 못했다. 특히, 컴퓨터와 너무도 안어울리는 한글 때문에 무쟈게 고생했다.

 

그런데...

 

정규식에 문자집합이라는게 있다.

 

이런거다.

 

[a-z]   : 영어 소문자

[A-Z]  : 영어 대문자

[0-9]   : 숫자

[aeiou]: 모음

 

[] 안에 일치시키려는 문자를 일일이 나열해주거나 범위 지정이 가능할 경우 그 범위만큼만 지정해 주면 된다.

 

이렇게 해도 된다는 말이다.

 

[k-p] : 알파벳에서 k 부터 p 까지만.

[4-8] : 숫자 4에서 8까지만.

 

그러니까, m[aeiou]n 이라고 정규식 패턴을 쓰면 man, mon, min, men, min, mun  식의 단어를 찾아준다. 1[4-7]8 이라고 하면 148, 158, 168, 178 을 찾아주는 식이다.

 

문자집합에서 [a-z][5-8]처럼 범위를 지정하는 경우는 상식적으로 순서가 매겨질때 가능하다. 그런데, 얼마전까지만 해도 당연히 순서가 매겨지는 한글은 범위 지정이 안됐다.

 

그러던 것이 유니코드를 지원하는 정규식 도구들이 등장하면서 한글도 범위지정이 가능해졌다.

 

이딴게 된다.

 

[가-힣] : 한글 한글자면 뭐든지 okay.

 

그래서 최[가-힣]규이라고 하면 최완규도 되고 최상규도 되고 최원규도 되고... 최홍규까지 된다. 자 사이에 어떤 글자가 와도 상관없다는 말이다. 물론, 우리 삼형제 처렴 규자 돌림에 완-상자까지만 있다면 최[완원상]규 라고 하거나 최[사-자]규 처럼 완원상이 포함될 범위를 지정해 주면 된다.

 

한글이 포함된 줄을 찾는 경우도 한글 범위가 지정되는 문자집합이라면 식은죽 먹기다.

 

.*[가-힣]+.* : 앞에 주절주절 영어든 숫자든 한글이든 마구 반복돼도 상관 없고 가운데 한글이 한 글자 이상 반복된 다음 또 무슨 문자가 반복돼도 상관없다.

 

.* 는 어떤 한 문자가 0개 이상 반복돼도 상관없다는 말이라고 했다. (삽질중독재활센터/정규식 이야기 참조) 따라서 그 가운데 [가-힣]+ 라는 것만 신경쓰면 된다. 이 패턴은 한글 한 글자에 해당한다.

 

[ㄱ-ㅎ]이나 [가-하]가 아니냐고? 

 

일단  [ㄱ-ㅎ] 는 한글 한 글자 범위가 아닌 자소 범위이기 때문에 말이 안되고, [가-하]의 경우 한글의 가능한 한 글자가 가 마지막이 아니라 이 마지막이기 때문이다. 더 이상 자세한 한글 문제는 이 글의 스꼬오뿌~ (scope)를 벗어나므로 다른 전문 문서 찾아보기 바란다. 유니코드에서 한글 첫글자는 이고 마지막 글자는 이라는 것만 알아도 짱구 굴리는 호모 사피엔스는 무슨 말인지 알아들을 걸로 믿는다.

 

위 한글 포함 줄 찾기 패턴을 한글 범위가 지원되지 않을 경우 정규식과 비교해 보시라.

 

한글 범위 지정 문자집합이 지원 안될 경우: ^[^a-zA-Z0-9]+$|^[a-zA-Z0-9]+[^a-zA-Z0-9]+$

 

죽음이다.

 

영어->한글 식으로 반복되는 자막을 한글->영어식으로 회화 문서로 만들어보는 정규식도 마찬가지다. 한글 범위 지정 문자집합이 지원되지 않으면 이런 짓을 해야 한다.

 

영문 자막/한글 자막 두줄 찾기 패턴: (^[ a-zA-Z0-9,.!?']+$)\n(^[^a-zA-Z0-9]+$|^[a-zA-Z0-9]+[^a-zA-Z0-9]+$)

 

이걸 찾아서 뒤집는 예를 보여준바 있다.

 

뒤집기 패턴: \2\n\1

 

두번째 줄(\2)과 첫번째 줄(\1)을 뒤바꾸는 패턴이다. 여기서 영문 자막/한글 자막 두줄 찾기 패턴은 한글 범위 지정 문자집합을 활용하면 이렇게 간단히 표현할 수 있다.

 

영문 자막/한글 자막 두줄 찾기 패턴: (^[ a-zA-Z0-9,.!?']+$)\n(.*[가-힣]+.*)

 

자랑스럽게도 대두족장 정규식 편집기는 한글 문자집합 및 범위 지정 지원한다^^

 

하지만...

 

솔직히 고백해서 이 기능은 내가 만든게 아니라 Python 및 그 GUI tool인 wxPython을 만든 개발자들이 Unicode 를 지원하기 위해 뺑이 친 결과다. 이게 바로 오픈소스(OpenSource)의 힘이라고 본 연사 열라 외치지만... 아무도 들어주지 않을 거 뻔하다ㅡ.ㅡ

 

좌우지간... 정규식 문자집합에 한글이 지원되고, 범위 지정까지 지원된다는 것만 알아도 정규식의 빠우어~ 는 따따블이 됐다고 해도 과언이 아니다.

출처 : http://cafe.naver.com/wankyu.cafe

'Etc' 카테고리의 다른 글

Ajax Loading Image 로딩 이미지 Resource  (0) 2011.12.14
무료 관리자 페이지 템플릿 10선  (0) 2011.07.29
RSS 피드 등록 방법  (0) 2011.05.21
인터넷익스플로러 여러버전 동시 사용  (0) 2011.04.18
정규식 강좌  (0) 2011.04.06

+ Recent posts