오늘은 그 첫 포스팅이다^^ 물론, 이 카테고리는 정규식 기본은 어느 정도 배웠다고 여기고 진행한다.
"성이 정이요 이름은 규식씨?"식으로 갸우뚱 하는 분은 정규식 이야기나 삽질중독재활센터 읽고 오시기 바란다.
또, 나 역시 정규식은 언제나 배우는 입장이다. 정규식에 정답이란 없다. 정규식은 단순한 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 |