“정규식이 뭔지는 이제 좀 감이 온다만 대체 어디다 쓰는 건데?”


이런 의문이 드시죠? 그렇습니다. 배웠으면 써먹어야 할테니까요. 물론 저 같은 경우는 그냥 배웠습니다. 순전히 재미로요. 하지만 배우고 나니 쓸 데가 무궁무진하더군요. 물론 제 직업이 프로그래밍이다 보니 그렇기도 하지만요. 사실 프로그래머가 아니라면 그닥 써먹을 데가 없을 것 같기도 합니다.


이곳, 머니북 사이트에 보면 블로그 메뉴가 있습니다. 그리고 그중에 ‘역사속 오늘’이라는 코너가 있습니다. 거의 매일 실리고 있는데 하루치 분량이 상당합니다. 여기서 돌발 퀴즈. 첫째, 이 많은 내용을 일일이 칠 것이다. 둘째, 아니다 어디선가 베껴왔을 것이다. 답은 두 번째입니다. 어느 분인가가 트위터에 꾸준히 올려주시는 덕에 저희는 그분의 허락 하에 그걸 정리해서 싣고 있는 것입니다.


그런데 원문은 이와 상당히 다른 포맷으로 되어 있습니다. 해서 깔끔하게(저희들 기준일 수도 있겠지만) 정리해야 하는데 이 일을 수작업으로 하자면 보통 일이 아닙니다. 해서 정규식의 힘을 빌어 한 방에 처리하고 있습니다. 여기서 잠깐 그 정규식을 보여드리겠습니다. 참고로 이 코딩은 제가 한 것입니다. ^_^


<script language="JavaScript">

function reg() {

var s, t, s1, s2, sA, sB, sY, sM, sD, l, i, j;


s = document.getElementById('k').value;

s = s.replace(/손.+\n/g, '');

s = s.replace(/web에서 작성된 글\s*\n/g, '');

s = s.replace(/^\s*\n/gm, '');

sA = s.split('\n');

l = sA.length;

if (l > 1) l--;


s = '';

for (i = 0; i < l; i++) {

s1 = sA[i].match(/^(\d{1,2})월/);

sM = s1[1];

sM = (s1[1].length == 1) ? '0' + sM : sM;


s1 = sA[i].match(/월(\d{1,2})일/);

sD = s1[1];

sD = (s1[1].length == 1) ? '0' + sD : sD;


s1 = sA[i].match(/=(\d{4,4})(\(.*?\))년 오늘 /);


if (s1 == null) {

s1 = sA[i].match(/=(\d{4,4})년 오늘/);


if (s1 == null) {

s += '/' + sM + '/' + sD;

s1 = sA[i].match(/=(.+)/);

} else {

s += s1[1] + '/' + sM + '/' + sD;

s1 = sA[i].match(/오늘(.+)/);

}

} else {

s += s1[1] + '/' + sM + '/' + sD + s1[2];

s1 = sA[i].match(/오늘 (.+)/);

}


sB = s1[1].match(/(\d{4,4})(\(.*?\))년 오늘/g);

if (sB != null) {

for (j = 0; j < sB.length; j++)

s1[1] = s1[1].replace(sB[j], '\n' + sB[j].substring(0, 4) +  '/' + sM + '/' + sD + sB[j].substring(4, sB[j].length-4));

}


sB = s1[1].match(/(\d{4,4})년 오늘/g);

if (sB != null) {

for (j = 0; j < sB.length; j++)

s1[1] = s1[1].replace(sB[j], '\n' + sB[j].substring(0, 4) +  '/' + sM + '/' + sD + ' ');

}

s += ' ' + s1[1] + '\n';

}

document.getElementById('m').value = s;

}

</script>


어떠세요? 물론 실력 있는 분들이 보시기엔 허접한 수준의 코딩일 것입니다. 어쨌든 정규식이라는 게 이런 식으로 써먹는 거구나 하는 감이라도 잡으시라는 의미에서 보여드립니다.


이밖에도 회원 가입 받을 때 입력한 이메일의 유효성 검사에도 정규식이 잘 쓰입니다. 가령 abcddd.dfkfjkdjfk 같은 식으로 입력하면 걸러내야 하니까요. 골벵이가 꼭 들어가야지요. 그렇다고 골벵이가 두 개 들어가도 안 됩니다. 또 도메인에 점이 한 개 이상은 꼭 들어가야 하고요. 나중에 다 알려드리도록 하겠습니다.


울트라 에디트 얘기를 꺼낸 적이 있는데 이밖에 에디트 플러스에서도 정규식을 지원합니다. 기능이 좀 괜찮다 싶은 텍스트 에디터에서는 보통 정규식을 많이들 지원합니다. 마이크로소프트의 비주얼 스튜디오도 마찬가집니다. 그런데 웃기는 건 비주얼 스튜디오의 프로그래밍 차원에서의 정규식 지원은 상당한 수준인데 반해 비주얼 스튜디오 에디터 자체에서 지원하는 정규식 성능은 꼬지기 이를데 없다는 점입니다. 과연 마이크로소프트네요.


List of Articles
번호 제목 글쓴이 날짜 조회 수sort
9 정규표현식 006. 메타문자 1 마라톤맨 2012-01-07 9129
8 정규표현식 017. 하위 표현식 2 마라톤맨 2012-01-27 8529
7 정규표현식 001. 맛보기 마라톤맨 2012-01-02 8426
6 정규표현식 008. 메타문자 3 머니북 2012-01-09 7746
5 정규표현식 004. 정규표현식이란? 마라톤맨 2012-01-05 7567
4 정규표현식 002. 맛보기 심화 단계 마라톤맨 2012-01-03 6828
» 정규표현식 005. 근데 어디다 쓰는 것인고? 마라톤맨 2012-01-06 6811
2 정규표현식 003. 맛보기 울트라 수퍼 심화 단계 마라톤맨 2012-01-04 6716
1 정규표현식 009. 메타문자 4 머니북 2012-01-10 6655