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


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


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


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


<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
번호 제목 글쓴이 날짜 조회 수
9 정규표현식 009. 메타문자 4 머니북 2012-01-10 7546
8 정규표현식 008. 메타문자 3 머니북 2012-01-09 8604
7 정규표현식 007. 메타문자 2 마라톤맨 2012-01-08 13366
6 정규표현식 006. 메타문자 1 마라톤맨 2012-01-07 9970
» 정규표현식 005. 근데 어디다 쓰는 것인고? 마라톤맨 2012-01-06 7637
4 정규표현식 004. 정규표현식이란? 마라톤맨 2012-01-05 8496
3 정규표현식 003. 맛보기 울트라 수퍼 심화 단계 마라톤맨 2012-01-04 7497
2 정규표현식 002. 맛보기 심화 단계 마라톤맨 2012-01-03 7669
1 정규표현식 001. 맛보기 마라톤맨 2012-01-02 9232