게시판 본문 ASP, ASP.NET, IIS & Script - Read Only

re: 샘플코드입니다.
작성자: 송원석
작성일시: 2003-03-27 11:51,  조회수: 4,546
안녕하세요? 송원석 입니다. ^_^

일단 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
전체 5 건의 댓글이 존재합니다.

송원석

음... 이 글을 작성한 다음에 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
전체 2,095 건의 게시물, 84 페이지로 구성된 ASP, ASP.NET, IIS & Script 게시판의 84 페이지입니다.
게시물
30

re: 또 질물을... ^^;

ㅜ.ㅜ

2003-06-25 4,372
29

리턴되는 dataset 을 asp 에서 처리 하기..[문의]

궁금이

2003-06-19 3,425
28

re: 리턴되는 dataset 을 asp 에서 처리 하기..[문의]

송원석

2003-06-20 3,551
27

[질문] 아래질문에 이어 ^^ (죄송~)

신순유

2003-06-17 1,479
26

re: [질문] 아래질문에 이어 ^^ (죄송~) [2]

송원석

2003-06-17 3,087
25

[질문]콜렉션에 대하여..

신순유

2003-06-16 1,762
24

re: [질문]콜렉션에 대하여.. [2]

송원석

2003-06-16 2,988
23

안녕하세요.. [2]

진진

2003-05-26 1,670
22

re: 안녕하세요.. [1]

송원석

2003-05-27 3,187
21

아크로벳을 asp에서 핸들링 할수 있나요? [3]

붐붐

2003-05-07 3,761
20

re: 아크로벳을 asp에서 핸들링 할수 있나요? (Ed. 1) [2]

송원석

2003-05-09 3,743
19

re: 아크로벳을 asp에서 핸들링 할수 있나요? (Ed. 1) [1]

붐붐

2003-05-20 1,739
18

질문입니다요..

lang2

2003-04-02 3,769
17

re: 질문입니다요..

송원석

2003-04-02 3,578
16

정규표현식 관련 질문입니다.

lang2

2003-03-26 3,801
15

re: 정규표현식 관련 질문입니다.

송원석

2003-03-26 3,587
14

re: 샘플코드입니다.

lang2

2003-03-27 3,602

re: 샘플코드입니다. [5]

송원석

2003-03-27 4,546
12

re: 감사합니다.

lang2

2003-03-27 3,836
11

ASP, ASP.NET & Script Forum 을 시작합니다. [4]

송원석

2003-02-22 4,188