스크립트 강좌

자신이 아는것을 알려 보세요. :)
큰 도움이 됩니다.

Tip. 소켓 소스 거르는 팁

조회 수 671 추천 수 0 2012.01.17 01:25:19

소켓을 무사히 오픈했다면 그 다음 관문은 소켓소스를 거르는 작업일 것입니다.


그방법에는 if 문(isin, iswm)이나 정규표현식($regex, $regsub. ). 빅보스님의


$socket_filter 알리아스가 있습니다.


없으신 분들을 위한 참고.


Socket_Filter { 

  var %x, %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x), %x = $remove(%x,&nbsp;) 

  return %x 


소켓필터는 강력합니다. 그런데 써보니 &amp; 같은것들이 안걸러지길래 제가 따로 수정한 알리아스를 소개합니다.


Filter { 

  var %x, %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x), %i = $regsub(%x,/(\&[#a-zA-z0-9]*\;)/g,,%x) 

  return %x 


사용법은 $socket_filter와 같습니다.


ex) //echo -a $filter(%temp)


그러나 제가 소개하려는것은 이것이 아니고 제가 예전에 올렸던 $gottok 알리아스입니다.


Gottok {

  var %gettok = $gettok($replacex($1,$3,z,z,$3),$2,$asc(z))

  var %return = $replacex(%gettok,$3,z,z,$3)

  return %return

}


간단한 설명을하자면 2바이트 이상의 값을 $gettok 처럼 처리 하는것입니다.
사용법또한 $gettok 과 거의 같습니다.

$gottok(a하b하c하d하e,3,하)        returns c


사용법을 예를들자면 아래같은 소스가 %temp 에 있다고 합시다.
</thead><tbody><tr><td>410</td><td>395</td><td>378</td></tr></tbody></table></article></section><section class="dash"><h1>Comments</h1><div id="disqus_thread">


이중에 저는 볼드처리되어있는 378만 뽑아오고자 합니다.


이경우 $socket_filter 나 $filter 를 쓰려고하면 걸러지는값이 410395378Comments 가 되어버릴것입니다.


이때 주로쓰는 방법은 $regex 나 $regsub 일것입니다. 그러나 써보신 분들은 아시겠지만 소스가 길면 길수록 

정규표현식을 이용할때 시간이 더 걸립니다. 즉 느려집니다. 그래서 정규표현식을 써야되는 부분을 최대한 줄여서 쓰게되지요.


자, 그럼 $gottok 을 이용해봅시다.


var %point = $gottok(%temp,1,</td></tr>) 

var %point = $gottok(%point,2,</td><td>)


result : 378


간단하죠?


물론 이것은 어디까지나 한 예로써 적용이 안되는 때도 있을것입니다.


그리고 약간의 억지를 부린것이기 때문에 껄끄러울때도 있을것이고요.


그러므로 어느정도 이상이 없을것이라고 확신이 들때 사용하면 간편할 것입니다.


극단적으로 이렇게도 됩니다.


var %point = $gottok(%temp,1, </td></tr></tbody></table></article></section><section class="dash">) 

var %point = $gottok(%point,2,</td><td>)


result : 378


아직까지 스크립트 자체에 문제는 발견하지 못했습니다. 하지만 알리아스를 보시면 알겠지만 문제가 있을것처럼 생겼습니다.


만약 발견하시면 댓글을 달아주시면 감사하겠습니다.


여기까지 팁이었습니다..


[레벨:3]루나틱

2012.01.17 03:05:56
*.167.88.141

iswm 는 다순 와일드 카드 구문인것같은데..제가 잘못 알고 있나요...

 -------------------------------------------------------------------------------------------------------------------------------------------------------------------

밑에 gottok부분은 이렇게 할수 있지요...

assertion을 활용하면 됩니다..

 

//echo -a $regex(</thead><tbody><tr><td>410</td><td>395</td><td>378</td></tr></tbody></table></article></section><section class="dash"><h1>Comments</h1><div id="disqus_thread">,</td><td>(?:.*)</td><td>(.*)</td></tr>) | echo -a $regml(1)

 -------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

$gettok(a하b하c하d하e,3,하)        returns c 이부분은 오타같구요..  $gottok(a하b하c하d하e,3,하)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Filter { 

  var %x, %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x), %i = $regsub(%x,/(\&[#a-zA-z0-9]*\;)/g,,%x) 

  return %x 

 -------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

요부분은  alias webfilter { var %i = $regsub($1-,/(&|\#)(.*?);/g,$2,%filter) | return $iif($2,$left(%filter,-2),%filter) }

 

요렇게 대체 할수 있겟네요..

 

개인적인 의견으로는 필터는 정규식으 쓰는게 더 좋다고 생각합니다.. 깔끔하고.. 무엇보다 정규식을 쓰면 느려진다는 이야기는

첨듣는 이야기인데.. 정말인가요??

 

 

 

 

[레벨:2]유카리코

2012.01.17 08:11:53
*.75.73.140

오타 지적 감사합니다.

iswm 은 help파일 어디선가 정규식을 사용가능하다 들은거같기도해서 걍쓴건데 아닌가보네요.

그리고 정규식쓰면 확실히 느려집니다.

그래서 저는 미리 소스를 if  isin 문으로 구간을 정하고 그안에서만 정규식을 씁니다.

근데 마지막 webfilter는 <> 안에있는 내용은 안없에지 않나요?

전 그거랑 &~; 둘다 처리한것입니다.

[레벨:2]유카리코

2012.01.17 08:25:06
*.75.73.140

그런데 루나틱님.

웹필터 알리아스가 극단적으로

//say $webfilter(<temp>하늘 & 땅! </temp></br>;)


이렇게 쓰면 <temp>하늘 이 뜨는데 & 하고 #, 영어 숫자  + ; 로 한정해야하지않나요?

[레벨:3]루나틱

2012.01.17 09:15:27
*.167.88.141

맞습니다 ^^ e.g ::  &#acd;, &lh; 요렇게 생긴것들 ; (대체로 소스에서 깨지는 특수문자)

요걸 지우기위해 만든건데 그렇게 한정해야합니다. 

List of Articles
번호 제목 글쓴이 날짜 조회 수
253 Tip. tokenize 의 진정한 사용법. [1] [레벨:2]유카리코 2012-01-17 619
» Tip. 소켓 소스 거르는 팁 [4] [레벨:2]유카리코 2012-01-17 671
251 Tip. 더욱 간단해진 자반 스크립트. [레벨:2]유카리코 2012-01-16 751
250 마이피플 연동관련 file [레벨:3]루나틱 2011-12-20 1722
249 Dialog $dname, $devent, $did [1] [레벨:1]이루릴 2011-03-17 2279
248 [Tip] 소켓 중 헤더 제거 [2] [레벨:4]늘모 2011-01-30 2887
247 관리자,권한자 .. [2] [레벨:1]Re〃돌격♬ 2010-08-23 2272
246 아진짜-_-;; [5] [레벨:1]Re〃돌격♬ 2010-08-17 2260
245 봇초보분들을위한 글(저도초보ㅠㅠ) [6] [레벨:1]Re〃돌격♬ 2010-08-14 2075
244 ftp를 이용하여 파일 업로드하기 [1] [레벨:4]늘모 2010-08-06 2330
243 [TIP] ZeroIRC의 노래 재생 정보 안보이게하기 [7] [레벨:8]Ra 2010-03-22 2183
242 저같은 초보분들을 위한 뻘글(ㅇㅇ) [2] [레벨:0]개님 2009-10-04 2587
241 [Tip] mIRC 6.35 팝업 옵션 [레벨:1]귤ⓔ 2009-09-23 2969
240 만든김에 올려봅니다. 긴수를 쉼표로 끊어주는 코드입니다. [1] [레벨:3]루나틱 2009-09-12 1889
239 [Tip] on nick에서 채널 구분하기. [3] [레벨:5]탕코 2009-03-22 1951
238 [tip] 자기 자신 혼자 남은 채널의 자동 옵 복구 [5] [레벨:8]Ra 2009-03-17 2582
237 뻘팁) 구글, 다음 URL로그인 주소 [레벨:4]세류 2009-01-12 1933
236 [tip] 변경되는 일시적인 문자의 화면 표시 방법 [4] [레벨:8]Ra 2008-12-09 2072
235 [뻘팁] 와일드카드 밴(?) + 네이버 로그인 주소 [5] [레벨:4]세류 2008-08-22 2147
234 가짜 챈섭을 만들어보자! [9] [레벨:3]루나틱 2008-05-02 3409



XE Login