스크립트 강좌
자신이 아는것을 알려 보세요. :)
큰 도움이 됩니다.
소켓을 무사히 오픈했다면 그 다음 관문은 소켓소스를 거르는 작업일 것입니다.
그방법에는 if 문(isin, iswm)이나 정규표현식($regex, $regsub. ). 빅보스님의
$socket_filter 알리아스가 있습니다.
없으신 분들을 위한 참고.
Socket_Filter {
var %x, %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x), %x = $remove(%x, )
return %x
}
소켓필터는 강력합니다. 그런데 써보니 & 같은것들이 안걸러지길래 제가 따로 수정한 알리아스를 소개합니다.
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
}
$gottok(a하b하c하d하e,3,하) returns c
이중에 저는 볼드처리되어있는 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
아직까지 스크립트 자체에 문제는 발견하지 못했습니다. 하지만 알리아스를 보시면 알겠지만 문제가 있을것처럼 생겼습니다.
만약 발견하시면 댓글을 달아주시면 감사하겠습니다.
여기까지 팁이었습니다..

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) }
요렇게 대체 할수 있겟네요..
개인적인 의견으로는 필터는 정규식으 쓰는게 더 좋다고 생각합니다.. 깔끔하고.. 무엇보다 정규식을 쓰면 느려진다는 이야기는
첨듣는 이야기인데.. 정말인가요??