게시판 본문 ASP, ASP.NET, IIS & Script - Read Only
re: 샘플코드입니다. |
---|
작성자: 송원석
작성일시: 2003-03-27 11:51,
조회수: 5,801
|
안녕하세요? 송원석 입니다. ^_^
일단 lang2 님의 상황을 가급적 비슷하게 재현해보려고 노력했습니다만, 실제 상황에서는 어떻게 될지 장담은 못드리겠습니다. ^_^;; 다음의 샘플 코드가 도움이 되면 좋겠네요... TestStr = "<div style=""padding:5px;"" class=list>" & _ "<font>•</font>" & _ "<!--@Key1시작@--><a href='/it/200303/24/200303241807349871500054005410.html'><!--@Key1끝@-->" & _ "<!--@Title1시작@--> 틴틴 경제 개설 첫주 25만 페이지뷰 기록<!--@Title1끝@--></a><br>" & _ "<font>•</font>" & _ "<!--@Key2시작@--><a href='/it/200303/24/200303241733280771500054005410.html'><!--@Key2끝@-->" & _ "<!--@Title2시작@--> '틴틴 온라인 교실' 인기<!--@Title2끝@--></a><br>" & _ "<font>•</font>" & _ "<!--@Key3시작@--><a href='/it/200303/24/200303241716363031500054005410.html'><!--@Key3끝@-->" & _ "<!--@Title3시작@--> [나의 단골 사이트] 백운철 외환카드 사장<!--@Title3끝@--></a><br>" & _ "<br>" & _ "</div>" Set MatchesColl01 = RegExpExec("<!--@Key\d{1,2}시작@--><a href='(/\S+/\d{6}/\d{2}/\d+.html)'><!--@Key\d{1,2}끝@--><!--@Title\d{1,2}시작@-->([^<]+)<!--@Title\d{1,2}끝@-->", TestStr) For i = 0 To MatchesColl01.Count - 1 Response.Write MatchesColl01.Item(i).SubMatches(0) & "<br>" Response.Write MatchesColl01.Item(i).SubMatches(1) & "<br><br>" Next '****************************************************** '* Public Function RegExpExec(Patrn, TestStr) '* RegExp.Execute() 메소드를 일반화한 함수 '****************************************************** Public Function RegExpExec(Patrn, TestStr) Dim ObjRegExp On Error Resume Next Set ObjRegExp = New RegExp ObjRegExp.Pattern = Patrn '** 정규 표현식 패턴 ObjRegExp.Global = True '** 문자열 전체를 검색함 ObjRegExp.IgnoreCase = True '** 대.소문자 구분 안함 Set RegExpExec = ObjRegExp.Execute(TestStr) Set ObjRegExp = Nothing End Function 일단 여기에 사용된 정규 표현식에 관한 기술적인 내용들은 대부분 제 글중에 'RegExp.Test() 메서드와 RegExp.Execute() 메서드의 활용' 에서 말씀드렸던 것들입니다. 여기에서는 이에 관해서 별도로 설명드리 않는것으로 하겠습니다. ^_^;; 다만 가장 중요한 부분인 정규 표현식 패턴에 대해서는 간단하나마 설명을 드려야 할 것 같네요. 먼저 <!--@Key1시작@--> 과 같은 주석 부분들은 다음과 같이 구성했습니다. <!--@Key\d{1,2}시작@--> \d 패턴이 하나의 숫자 문자를 나타내므로 \d{1,2} 는 한 자리 또는 두 자리의 숫자 문자를 의미합니다. Key 의 갯수가 99 개는 넘지 않을 것으로 가정했기 때문에 두 자리까지만 허용되도록 한 것이죠. ^_^ 그 다음에 <a> 태그쪽을 살펴보면 URL 에 일정한 규칙이 있더군요. 그래서 그 규칙을 이용했습니다. 먼저 'it' 같은 분류가 나오고, 그 다음에 년도와 달을 나타내는 6 자리 숫자 문자, 그 다음에 날짜를 의미하는 두 자리 숫자 문자 그리고 마지막으로 긴 숫자로 구성된 문서 이름이 .html 확장자로 끝나게 됩니다. 그래서 이대로 구현했습니다. <a href='(/\S+/\d{6}/\d{2}/\d+.html)'> 그리고 나중에 이 URL 을 얻어내기 위해서 ( ) 를 사용해서 역참조를 만들었구요. 마지막으로 <a> 태그의 내용에 해당하는 부분은 다음과 같이 구성했습니다. <!--@Title\d{1,2}시작@-->([^<]+)<!--@Title\d{1,2}끝@--> 즉 < 가 아닌 모든 문자열을 허용한다는 의미가 되는데, 만약 Title 중에 < 문자가 존재할 수도 있다면 이 부분은 조금 바뀌어야 할 것 같습니다. 해서 위의 코드를 실행시키고 나면 다음과 같은 결과가 얻어지게 됩니다. /it/200303/24/200303241807349871500054005410.html 틴틴 경제 개설 첫주 25만 페이지뷰 기록 /it/200303/24/200303241733280771500054005410.html '틴틴 온라인 교실' 인기 /it/200303/24/200303241716363031500054005410.html [나의 단골 사이트] 백운철 외환카드 사장 감사합니다. |
IP 주소: 210.118.108.254
|
송원석 |
음... 이 글을 작성한 다음에 Perl 의 정규 표현식을 잘하는 다른 친구에게 물어봤는데요. 더 쉬운 방법이 있더군요. ^_^;;;
|
2003-03-27 12:02 |
송원석 |
"<!--@Key\d{1,2}시작@--><a href='(/\S+/\d{6}/\d{2}/\d+.html)'><!--@Key\d{1,2}끝@--><!--@Title\d{1,2}시작@-->([^<]+)<!--@Title\d{1,2}끝@-->" 을...
|
2003-03-27 12:02 |
송원석 |
"<!--@Key\d{1,2}시작@--><a href='(.*?)'><!--@Key\d{1,2}끝@--><!--@Title\d{1,2}시작@-->(.*?)<!--@Title\d{1,2}끝@-->" 로 고치시면 됩니다. ^_^;;;
|
2003-03-27 12:03 |
lang2 |
고맙습니다. 눈크게 뜨고 확인해보도록 하겠습니다.^^
|
2003-03-27 12:04 |
송원석 |
에구~ 정규 표현식은 다 좋은데 패턴이 너무 복잡해서 눈이 돌아갈 지경이라는게 흠이죠. ^_^;;;
|
2003-03-27 12:22 |
게시물 | ||||
---|---|---|---|---|
30 | 2003-06-25 | 7,261 | ||
29 | 2003-06-19 | 4,729 | ||
28 | 2003-06-20 | 4,864 | ||
27 |
신순유 |
2003-06-17 | 1,479 | |
26 | 2003-06-17 | 4,363 | ||
25 |
신순유 |
2003-06-16 | 1,762 | |
24 | 2003-06-16 | 4,276 | ||
23 |
안녕하세요.. [2] |
진진 |
2003-05-26 | 1,670 |
22 |
re: 안녕하세요.. [1] |
2003-05-27 | 4,456 | |
21 | 2003-05-07 | 5,098 | ||
20 | 2003-05-09 | 5,091 | ||
19 |
붐붐 |
2003-05-20 | 1,739 | |
18 | 2003-04-02 | 5,075 | ||
17 | 2003-04-02 | 4,804 | ||
16 | 2003-03-26 | 5,040 | ||
15 | 2003-03-26 | 4,812 | ||
14 | 2003-03-27 | 4,851 | ||
re: 샘플코드입니다. [5] |
2003-03-27 | 5,801 | ||
12 | 2003-03-27 | 5,074 | ||
11 | 2003-02-22 | 5,456 |