1 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/07/10(月) 06:09:39 ID:8aujFXYU0] このスレは作成依頼されたフィルタを 有志により作るスレッドPart4です 煽り、荒しは放置してください 【関連サイト】 Proxomitron-J ttp://www.pluto.dti.ne.jp/~tengu/proxomitron/ 日本語訳ヘルプ ttp://www.pluto.dti.ne.jp/~tengu/proxomitron/help/Contents.html 本体(N4.5May)とその日本語化パッチ、OpenSSLライブラリのダウンロード ttp://www.pluto.dti.ne.jp/~tengu/proxomitron/download.html アップローダー ttp://wind.prohosting.com/proxmine/cgi-bin/uploader/ 4.5June+shift_jis誤爆回避日本語化+RWIN32768回避+バイパス赤icon+有難屋icon な本体 wind.prohosting.com/proxmine/cgi-bin/uploader/download.cgi?PmU_0338.zip IE用必須設定(高速化)・過去ログ・FAQ・ime.nu消し・関連リンク ttp://www2.wbs.ne.jp/~go-to/prx/faq.html 【関連スレ】 Proxomitron Part25 ttp://pc8.2ch.net/test/read.cgi/win/1115110149/ ■■■■Proxomitron入門スレッド■■■■5 ttp://pc8.2ch.net/test/read.cgi/pcqa/1107577736/ ブラクラにProxomitronで対抗するスレPart5 ttp://pc8.2ch.net/test/read.cgi/software/1060792740/ 【過去スレ】 Proxomitron フィルタ作成スレッド ttp://pc5.2ch.net/test/read.cgi/software/1083337210/ Proxomitron フィルター作成スレッド Part2 ttp://pc8.2ch.net/test/read.cgi/software/1100052614/
830 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/19(木) 18:21:06 ID:jrvNMl2x0] むむ、リストに入れなきゃいけないわけではないけど、フィルタの中に突然↑のような処理が入ったら なんのことやら混乱する可能性があるので可読性という点でリスト化させたほうが良いかなと思います。
831 名前:816 mailto:sage [2006/10/20(金) 00:59:27 ID:ELREBDG20] >>826 乙です。 > 繰り上がりが発生するときには、末尾の 999... を 0にし、繰り上がる桁の数値を +1 これこそ>>825 に書いた簡単なアルゴリズムです。 これに気付いていれば>>824 みたいな難解で遅いものを 書く必要は無かったですね。 でも、 ローカル変数でも $SET(0=) 等で明示的に初期化する必要がある 場合があることなど、今まで知らなかったオミトロンの挙動が次々に出てきたのでなかなか楽しめました。 PS、 数字が 999 などの 9 の繰り返しだった場合に 000 などになってしまうようです。 >>829 リスト化すれば使い回しがしやすくて便利そうですね。 完成したらどこかで配布してみてはいかがでしょう、きっと重宝されると思います。 あと、リストを使った回帰的処理というのは面白い発想でした。 これが正しく動作するとすれば複雑な処理が簡単に書けるようになりますね。
832 名前:817 mailto:sage [2006/10/20(金) 01:36:13 ID:wAdVERPl0] >828 どうもありがとうございます。ばっちり解決していますね。 >820のような妙なコメントを書く人はあまりいないだろうと思いますが、 書かれることを想定しておいた方が後々のためになるだろうと思います。 フィルタを作る際は、一応はあらゆる場合を想定しておいた方が 安心して使えるだろうと思うので……。 解説もありがとうございました。 >828のようなテクニックを集めたサイトがあるとよいと思うものの、 wikiやthinkさんのサイト内などにはあるのかな。
833 名前:816 mailto:sage [2006/10/20(金) 04:46:14 ID:kgbwGCqt0] リストを使ったループもちゃんと動作しますね。 オミトロンでここまで出来るとは...。 [Patterns] Name = "LIST rooptest" Active = FALSE Limit = 256 Match = "$LST(rooptest)" Replace = "[\@]$STOP()" ----------------rooptest.txt---------------- (1)\#($LST(rooptest)|) ----------------rooptest.txt---------------- テストウインドウ: 111 結果: [111]
834 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/20(金) 04:49:49 ID:H4LiK3bO0] どうでもいい話、ループの最大回数がわかってる場合は (?)+{1,4}とか決め付けると極端に高速化したような気がした。 今はもうこれ自体使ってないからかなり忘れかけてるけど。
835 名前:816 mailto:sage [2006/10/20(金) 05:06:17 ID:kgbwGCqt0] >>834 30000バイトの文字列をテストウインドウに貼って (?)+{30000} (?)+ の2つの速度をプロファイルボタンから調べて比べてみたんですが限りなく同タイムでした。 高速化したというのはたぶんlimitと同じような目的で使った場合の話ですね。
836 名前:816 mailto:sage [2006/10/20(金) 07:02:24 ID:kgbwGCqt0] >>826 test6.1のほうですがテストウインドウに111と入れると222になったりしたので修正してみました。 「 + 」 での取り込みで最短一致でマッチングしてるのが原因でした。 ついでに 000 の問題も修正。 もっといい方法があれば手直しを。 [Patterns] Name = "number +1 [Match ver] [2006/10/19] test6.2" Active = TRUE Limit = 32767 Match = "(9+{1,*})\0(^[0-9])$TST(\0=$SET(#=1)(9$SET(#=0))+)" "|([0-9]++)\#([0-9])\0(9+{1,*})\1(^[0-9])" "$TST(\0=$LST(Num-plus))" "$TST(\1=($LST(Num-plus))+)|" "([0-9]++)\#([0-9])\0(^[0-9])" "$TST(\0=$LST(Num-plus))" Replace = "[\@]"
837 名前:816 mailto:sage [2006/10/20(金) 07:09:54 ID:kgbwGCqt0] すみません、余計酷くなってしまいました。 ↑は無かったことに....。
838 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/20(金) 15:16:57 ID:pRyei5xN0] 以前、永久ループに陥ってから倦厭していた$NESTが何となく解るようになった。 少し進歩した(゚∀゚)アヒャ
839 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/20(金) 22:19:35 ID:sNjWaFpG0] >>831 > 完成したらどこかで配布してみてはいかがでしょう 出来れば、今日コンテンツに加えて更新したいところです。遅くとも明日には何とか…。 >>831 > あと、リストを使った回帰的処理というのは面白い発想でした。 >>832 > >828のようなテクニックを集めたサイトがあるとよいと思うものの、 実は「フィルタ公開 → 仕組み解説」という形でいくつかのテクニック解説をコンテンツに加えようと考えていましたが、考えるだけで先に進まないので、そろそろ始動しようと考えてます。 今サイトを改装中なので、そのときにフィルタ公開だけでもやってしまおうかと。 # 先にフィルタを公開すれば、要望or突っ込みなどいただけるかもしれませんしね。 # 別所で公開していたフィルタがあるので、皆さんが知っているフィルタも幾つかあると思います。(勘の鋭い方は既に気がついているかもしれませんねw) >>836 > 「 + 」 での取り込みで最短一致でマッチングしてるのが原因でした。 確かに困りますね、これは。 どうも私の最短一致についての認識が甘いみたいです。 (以前も * の最短一致で指摘されたことがありましたが、未だに勘違いしている節があります(汗)) 解決法としては、 ・数値の先端/末尾を含めてマッチさせる (最長一致とほぼ同等) ・数値の末尾のみにマッチさせる (必要な箇所だけ最短一致) のいずれかと思います。
840 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/20(金) 22:20:45 ID:sNjWaFpG0] >839の後者の方で解決してみました。 [Patterns] Name = "number +1 [Match ver] [2006/10/20] test6.3" Active = TRUE Limit = 32767 Match = "([0-9]++)\#([0-8])\0(9+{1,*})\1(^[0-9])" "$TST(\0=$LST(Num-plus))" "$TST(\1=($LST(Num-plus))+)|" "([0-9]++)\#([0-8])\0(^[0-9])" "$TST(\0=$LST(Num-plus))|" "(9+{1,*})\1(^[0-9])" "$SET(#=1)" "$TST(\1=($LST(Num-plus))+)" Replace = "\@" Name = "number +1 [$TST ver] [2006/10/20] test5.3" Active = TRUE Limit = 32767 Match = "([0-9]+)\0(^[0-9])" "(" "$TST(\0=([0-9]++)\#([0-8])\1(9+{1,*})\2)" "$TST(\1=$LST(Num-plus))" "$TST(\2=($LST(Num-plus))+)|" "$TST(\0=([0-9]++)\#([0-8])\1)" "$TST(\1=$LST(Num-plus))|" "$TST(\0=(9+{1,*})\1)" "$SET(#=1)" "$TST(\1=($LST(Num-plus))+)" ")" Replace = "\@"
841 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/20(金) 22:28:33 ID:sNjWaFpG0] あと一行、書ければ…。 >>831 > 数字が 999 などの 9 の繰り返しだった場合に 000 などになってしまうようです。 こちらは、もう一つ分岐を作ることで対応しました。 よく考えたら、([0-9])\0 じゃなくて ([0-8])\0 で良かったのですよね。 これで3つめの分岐が期待通りに動作すると思います。
842 名前:816 mailto:sage [2006/10/21(土) 02:22:58 ID:62B1+yNF0] >>839-841 サイト更新予定ですか、乙。 フィルターの公開とはとても楽しみです。 テクニック解説も期待してます、頑張って下さい。 >number +1 フィルター 修正乙です、ばっちり修正されてました。 あと、ちょっと考えてみたんですが、以下のことが気になったので ・ 下一桁が 9 である確率は 1/10 なのでこれにマッチするものを分岐の先頭に書くのは低速化になるような ・ 9 の繰り返しを 0 に置換するときはリストを使わずに $SET(#=0) を使ったほうが速い 自己流のものですが試しに書いてみました。
843 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/21(土) 02:29:26 ID:62B1+yNF0] [Patterns] Name = "number +1 (2006-10-21 beta3)" Active = FALSE Limit = 32767 Match = "([0-9]++)\#([0-8])\0(^[0-9])" "$TST(\0=$LST(Num-p-Ten))" "|" "9(^[0-9])$SET(#=10)" "|" "([0-9]++)\#" "([0-9])\0" "(9+{1,*})\1" "(^[0-9])" "$TST(\0=$LST(Num-p-Ten))" "$TST(\1=(?$SET(#=0))+)" Replace = "\@" -------Num-p-Ten.txt------ 0$SET(#=1) 1$SET(#=2) 2$SET(#=3) 3$SET(#=4) 4$SET(#=5) 5$SET(#=6) 6$SET(#=7) 7$SET(#=8) 8$SET(#=9) 9$SET(#=10) -------Num-p-Ten.txt------ このフィルターの場合、Num-plusリストの "9" で # に "10" を代入しても支障が無いので別のリスト名にして変更しました。 このせいで他のフィルターでリストの使い回しが出来なくなるのであれば元に戻す方向で。
844 名前:816 mailto:sage [2006/10/22(日) 07:56:03 ID:giDEESQO0] >>824 、>>840 、>>843 の3つのフィルターの速度を3万文字の数字で試してみたら>>824 が一番速い。 かなり予想外・・。
845 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/22(日) 08:54:24 ID:pIhJV0rv0] 処理にかかる時間は 4 : 10 : 5 >>824 >>840 >>843 くらいの倍率になるようですね、>>843 の高速化も予想以上に効いてます。
846 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/23(月) 06:41:54 ID:r0C1Bci+0] 所でオミトロンで数を+1することでどんなことが出来るんだ?
847 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/23(月) 13:46:05 ID:KvMb1J5K0] 主にcgiを中心としたURLだね。 あと一部のサイトにはサイトを番号で階層的に構築しているものもあるだろうから そういう場合に次ぎのカテゴリに飛ぶリンクやカテゴリ内の次のページに飛ぶリンクを埋め込むことができると思われる。 ちなみにURLの処理の場合はソース内のそれと比べて遙かに量が少ないので高速化したところで意味はほとんどない。 彼らは単なるベンチマニアなので気にしないでおいてあげようw
848 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/23(月) 18:55:30 ID:MzXqWBCb0] みんな頭がいいんだな。 もう何がなんだか(´・ω・`)ショボーン
849 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/23(月) 19:30:43 ID:r0C1Bci+0] JSオフにしてる人用って事か
850 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/23(月) 20:46:24 ID:LNHCxGv10] >>842 > ・ 下一桁が 9 である確率は 1/10 なのでこれにマッチするものを分岐の先頭に書くのは低速化になるような > ・ 9 の繰り返しを 0 に置換するときはリストを使わずに $SET(#=0) を使ったほうが速い なるほど。 >>843 ([0-9]++)\#([0-9])\0(9+{1,*})\1 は面白いですね。この発想はありませんでした。 9999... の数値の置換が高速に動作するのが良い感じですね。 >>844 > 3万文字の数字で試してみたら>>824 が一番速い。 おそらく、OR関数を使用している影響だと思います。 実際、ORの先頭の表現にマッチさせる条件だと、速度差がかなり小さくなります。
851 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/23(月) 20:47:43 ID:LNHCxGv10] あれからもう一度、初心に返って考え直してみたら、驚くほどスリムなフィルタになりました。 [Patterns] Name = "number +1 [Match ver] [2006/10/23] beta1" Active = TRUE Limit = 32767 Match = "(^(^[0-8]9+(^[0-9])))$LST(Num-plus)(9$SET(#=0))+|" "(^(^9))$SET(#=1)(9$SET(#=0))+(^[0-9])" Replace = "\@" Name = "number +1 [$TST ver] [2006/10/23] beta1" Active = TRUE Limit = 32767 Match = "([0-9]+)\0(^[0-9])(" "$TST(\0=\#(^(^[0-8]9+(^?)))$LST(Num-plus)(9$SET(#=0))+)|" "$TST(\0=$SET(#=1)(?$SET(#=0))+))" Replace = "\@" >842のアドバイスを受けて、ブロックリスト(Num-plus)から "9$SET(#=0)" を外し、更に ([0-9]++)\# を省きました。 >839で紹介した「数値の末尾のみにマッチさせる (必要な箇所だけ最短一致)」の応用形です。 我ながら、高速でシンプルなフィルタに仕上がったと思います。
852 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/23(月) 20:57:23 ID:LNHCxGv10] >>846 「相対URL → 絶対URL」にするときに ../ の出現回数をカウントして繰り返し処理させたいと考えたことがあります。 「+1 するフィルタ」を応用すると、「-1 するフィルタ」も出来そうなので、 「../ が何度出現しても絶対URLにするフィルタ」が作れそうです。 (今までは繰り返し回数を1〜4回のように決めうちして、ORで指定していました) 決めうちでもほとんどの状況を網羅できるので、わざわざグローバル変数を使ってまで実現する必要があるかというと疑問が残りますが…。 また、「グローバル変数に『特定の文字列』が何回マッチしたか記憶させたい」と考えたことも。 何度か出た話題ですが、行数も \n の数をカウントすれば、取得できます。 行数でなくても、「ある単語」がn回HITしたら、フィルタを働かせるロジックは応用が利きそうですね。 >>847 > 彼らは単なるベンチマニアなので気にしないでおいてあげようw アルゴリズムマニアも加えておいてくださいw
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/23(月) 21:31:20 ID:7VXS0HXl0] 画像を全部lightboxで表示するフィルタ書いてもらえませんか
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/23(月) 21:53:44 ID:4SBEQqzk0] そういえば昔、相対URLを絶対URLにするフィルタをつくろうとして 断念したことがあったっけ。 不要な画像つきリンクをテキスト化して軽くするフィルタなんだけれども。 今では別のフィルタで対応しているからつくる必要がなくなった。
855 名前:816 mailto:sage [2006/10/24(火) 03:02:33 ID:96jgfWU+0] >>850-851 乙です。 なるほど、こういう方法もありましたか。 置換に必要な場所にだけマッチさせる方法があったとは..。 それぞれのフィルターの速度を3万文字の数字で比較してみました。 計測には差が出やすいようにスーパーπ104万桁10分台の遅いマシンを使用。 --------------------------------------------------------------------- (1) (2) (3) (4) (5) 000.....0 000.....09 199.....9 999.....9 999....90 ( 対象文字列 ) >>824 43.319444 43.409722 49.640625 49.437500 46.897059 ( ミリ秒 ) >>843 48.953125 100.375000 70.340909 70.238636 33.804348 >>851 59.951923 60.000000 33.820652 25.366667 計測不能(応答なし) --------------------------------------------------------------------- >>851 のフィルターは 99999.. の後ろが 9 以外の数字で終わる場合に極端に時間がかかるようです。 実用的には問題無いと思われますがちょっと気になります。 先読みで数字の末尾を確認する 処理を入れたほうが良いかも..。 (3)、(4) の速さがすごいですね、高速化済みの>>843 の3倍も速いとは...w >>824 は対象がどんな数字でも安定してることが分かります。 >>843 は対象の末尾が 9 の場合をイレギュラーと考え、この場合の速度を無視した書き方なので 9 で終わる場合は遅いですね。
856 名前:816 mailto:sage [2006/10/24(火) 03:42:20 ID:96jgfWU+0] >>846 〜/00581.jpg 〜/00582.jpg 〜/00583.jpg みたいな連番の画像ファイルを見るときにブラウザをリロードするだけで次々に見れるようになります。 他にも応用次第で色々なことに使えるはず。 >>848 慣れればそのうち書けるようになるはず。 >>849 JSでは出来ないことにも使えるはず。 HTTPヘッダの置換等。 >>852 >わざわざグローバル変数を使ってまで 今まではグローバル変数を使うとすごく遅くなるという固定観念を持ってましたが >>824 を見るとそうでもなさそうなんですよね。 遠慮せずにもっと使うべきものなのかも。 >>854 >相対URLを絶対URLにするフィルタ それらしきフィルターをどこかで見た。
857 名前:816 mailto:sage [2006/10/24(火) 06:48:23 ID:96jgfWU+0] あれ、>>824 は対象文字列が3文字などの短い場合は他のよりかなり遅い。 グローバル変数のせいだろうか。 グローバル変数は動的な生成とその解放をするときに時間がかかるが、 代入や取り出しにかかる時間はローカル変数と変わらない...ってことかな? >>855 に書いた 999... の末尾が 9 以外の場合に遅くなるという件は "#" の回数制限の100文字程度なら プロファイルでも全然問題なく動作しますね。 3万文字の場合でもプロファイルでなく普通にテストする分には 正常に動作するから修正の必要は無いか。
858 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/24(火) 07:40:31 ID:iS+1bFGh0] >>853 abc.s65.xrea.com/prox/wiki/%A5%D5%A5%A3%A5%EB%A5%BF%A1%A2%A5%EA%A5%B9%A5%C8%B8%F8%B3%AB/Image%20Popup/
859 名前:816 mailto:sage [2006/10/24(火) 08:14:51 ID:96jgfWU+0] 応答なしの問題を回避するために>>851 に手を入れてみました。 変更点↓ ・ 9999.. の末尾の先読み判定を前に移動。 ・ (^[0-9]) を (^[0-8]) に修正。 ・ (^(^ 〜 )) から && に代えてみました。 タイム比較用。 [Patterns] Name = "number +1 (2006-10-24) beta4" Active = FALSE Limit = 32767 Match = "([0-8]9+(^[0-8])&&$LST(Num-plus)(9$SET(#=0))+)|" "(9+{1,*}(^[0-8])&&$SET(#=1)(9$SET(#=0))+)" Replace = "\@" // (^(^9))9$SET(#=0) は (^(^9))?$SET(#=0) より速いんですね、これも意外..。
860 名前:816 mailto:sage [2006/10/24(火) 08:30:32 ID:96jgfWU+0] タイム比較の結果は (^(^ 〜 )) >>> && でした。 以上。
861 名前:816 mailto:sage [2006/10/24(火) 08:32:00 ID:96jgfWU+0] ※ (^(^〜))[速い] >>> &&[遅い] です。
862 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/24(火) 10:18:39 ID:PwmdsW1B0] www.so-net.ne.jp/tv/bangumi/tvprgm/1_29_0.html の >テレビ王国 > 10月24日(火)の番組表 [地上波/奈良/ 5-12時] から上を消すフィルタお願いします。 >商号変更のおしらせ 「ソネットエンタテインメント株式会社」へ [PDF] >[テレビ王国ランキング!レポート全国版] 10/16〜10/22分リリース!! >テレビも動画も!あなたの好みに合わせてオススメ! >ドラマ情報続々!この秋スタートドラマを事前にチェック。 など >テレビ王国 > 10月24日(火)の番組表 [地上波/奈良/ 5-12時] より上すべて消したいです。
863 名前:816 mailto:sage [2006/10/24(火) 16:29:32 ID:96jgfWU+0] うわ〜! >>824 のlimitが256のままだった。 これでテストすれば早いのは当たり前..。 再テストしたら比較にならないほど遅かった、>>824 はボツ決定です..。(^^;A 次にグローバル変数とローカル変数の比較。 test1がグローバル変数を使ったフィルター、test2がローカル変数を使ったフィルターです。 [Patterns] Name = "test1" Active = FALSE Limit = 32767 Match = "0$SET(A=1)" Replace = "$GET(A)$SET(A=)" Name = "test2" Active = FALSE Limit = 32767 Match = "0$SET(0=1)" Replace = "\0" (対象文字列を100文字の "000...0" にしてテスト) 結果: test1 → 0.172000 (milliseconds)、 test2 → 0.000000 (milliseconds) (対象文字列を3万文字の "000...0" にしてテスト) 結果: test1 → 51.825000 (milliseconds)、 test2 → 4.156000 (milliseconds) 100文字のテストに比べると3万文字ではだいぶタイムの倍率は下がったが、それでも10倍以上遅い。 グローバル変数はなるべく避けたほうが良いでFAですね...。
864 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/24(火) 22:42:54 ID:vquh73VO0] >>855 > 99999.. の後ろが 9 以外の数字で終わる場合に極端に時間がかかるようです。 こんな限定された状況に、よく気がつきましたね! 原因は仰るように、\#の100回制限だと思います。 > 3万文字の場合でもプロファイルでなく普通にテストする分には正常に動作する 私の環境では、Webページ上でも期待通りに動作しない(100桁に制限された数値が出力される)ようですが、うーん…。 "999..." に>859のフィルタをマッチさせると、複数回マッチして、"10000..." が幾つも出力されてしまいます。 100回以上 $SET(#=) されるのが問題なので、$SETの繰り返し回数を100回以内に収まるようにしてみました。 [Patterns] Name = "incremented by one [Match ver] [2006/10/24] beta1.3" Active = TRUE Limit = 32767 Match = "(^(^[0-8]9+(^[0-9])))($LST(Num-plus))+(^[0-9])|" "(^(^9))$SET(#=1)((^(^9))$LST(Num-plus))+(^[0-9])" Replace = "\@" $LST(Num-plus) は>>827 に以下を追加します。 # 9 -- 512桁 9999999999...$SET(#=0000000000...) # 9 -- 32桁 (NOT関数の桁数は 512 - 32 = 480桁) 99999999999999999999999999999999(^9999999999...)$SET(#=00000000000000000000000000000000) # 9 -- 1桁 (NOT関数の桁数は 32 - 1 = 31桁) 9(^9999999999999999999999999999999)$SET(#=0)
865 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/24(火) 22:48:12 ID:vquh73VO0] >864のフィルタはProxomitronのLimitの上限(32767)を考慮に入れて、繰り返し回数が百回を超えることがないように作成してあります。 この方式だと「999....90」のテキストに対して [プロファイル] では落ちますが、[テスト] では落ちません。 Webページ上でも落ちなかったので、問題ないと思われます。 >>856 > それらしきフィルターをどこかで見た。 私のサイトで配布している "Kill without <a>" (汎用Webフィルタ集の一つ) がそれです。 2chでアドバイスを受けて作成したフィルタでして、アドバイスして頂いた方がアプロダに派生系(Link to Full Path) をUPされています。 ttp://wind.prohosting.com/proxmine/cgi-bin/uploader/index.cgi?search=Link+to+Full+Path&sstart=0001&send=9999&extlist=&size_min=0&size_max=256 直接の関係はありませんが、Wikiでも同種のフィルタが公開されています。 ttp://abc.s65.xrea.com/prox/wiki/%A5%D5%A5%A3%A5%EB%A5%BF%A1%A2%A5%EA%A5%B9%A5%C8%B8%F8%B3%AB/19/
866 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 02:29:53 ID:Gpa2YWWh0] 今思いついたけど、+1するフィルタを使えばJSなしでdat converter作れるね。 どっちが速いかはワカランけど。 どうやって計測すればいいんだろう。
867 名前:853 mailto:sage [2006/10/25(水) 02:38:09 ID:4LLBDAGk0] 自分で作ってみた lightbox_plusベースです [Patterns] Name = "lightbox part1" Active = TRUE Limit = 256 Match = "</head>" Replace = "<script type="text/javascript" src="Local.ptron/lightbox/spica.js"></script>\r\n" "<script type="text/javascript" src="Local.ptron/lightbox/lightbox_plus.js"></script>\r\n" "\r\n" "</head>" Name = "lightbox part2" Active = TRUE Limit = 256 Match = "([^>]++href=)\0$AV((([^/]+//)\1|)(\2).(jpg|gif|bmp|png)\3(.html+|)\4)" Replace = "\0"\1\2.\3\4" rel="lightbox" " 作った後でレスに気付いた・・・orz
868 名前:816 mailto:sage [2006/10/25(水) 05:37:11 ID:ptucl50B0] >>864 > 99999.. の後ろが 9 以外の数字で終わる場合 なるほど、\# の制限に引っかかってたのが原因でしたか、ありがとうございます。 >正常に動作する すみません、誤解しやすい書き方でした。 これは "応答なしにならない" という意味でした。 \# の制限に引っかかるので期待した結果は返ってこないです。 >"999..." に>859のフィルタをマッチさせると、複数回マッチ \# の制限に引っかかるとマッチングがそこで止まってしまう場合がありますね。 発生条件は分かりませんが100回を越えた時点で想定外なので調べる必要は無さそう。 >$SETの繰り返し回数を100回以内に収まるようにしてみました。 そうきましたか、すごい力技だw これで対応出来る数字の桁数が一気に上がると。 9の繰り返しが100個以上連続するHTMLソースは見たことがないので、実用的にはこの対策は 必要無いかも知れませんね。 対策しておきたい人もいるかも知れないので好みの問題かな。 >>865 ありがとうございます、たぶんWikiで見たんだと思います。 あとサイトの更新お疲れ様でした、HTMLソースをちらっと見たんですが綺麗なソースですね。 thinkさん謹製のフィルターもありがたく使わせて頂きます。
869 名前:816 mailto:sage [2006/10/25(水) 05:46:05 ID:ptucl50B0] >>863 の補足。 test1のReplaceから $SET(A=) を削除したらタイムが2/3倍になった。 グローバル変数をこまめに解放するとかえって遅くなる。 >>867 ∧_∧ ( ´・ω・) ・・・・・ドンマイ。 ( つ旦O と_)_)
870 名前:816 mailto:sage [2006/10/25(水) 10:47:42 ID:vE/VYVdH0] > 99999.. の後ろが 9 以外の数字で終わる場合 これよく考えると \# は関係ないですね。 対象文字列が 9999....90 の場合はオミトロンのマッチングが1バイト進むごとに 999...90 の末尾までのテストを繰り返すから遅くなるようです。 他のフィルターが検索表現が 999...90 の場合でも数字の先頭から一度でマッチしまずが、 このフィルターはマッチしないので何度も数字の末尾までを行ったりきたりしてしまう。 1999...90 の場合も極端に遅くなるし間違いなさそう。( 50文字でテストし確認 ) 数字の中に9を見つけたらそれ以降の数字が必ずマッチする書き方に変えたほうがいいのかな、 999... の末尾が 9 である確率は 1/10 だし、>>843 と融合させる手も。
871 名前:816 mailto:sage [2006/10/25(水) 10:53:30 ID:vE/VYVdH0] × 他のフィルターが ○ 他のフィルターは でした。
872 名前:853 mailto:sage [2006/10/25(水) 12:19:52 ID:4LLBDAGk0] 悔しいので改良してみた。 横の□を押すと別ウィンドウで開く。 [Patterns] Name = "lightbox_plus part1" Active = TRUE URL = "$TYPE(htm)" Limit = 256 Match = "</head>$STOP()" Replace = "<script type="text/javascript" src="Local.ptron/lightbox/spica.js"></script>\r\n" "<script type="text/javascript" src="Local.ptron/lightbox/lightbox_plus.js"></script>\r\n" "\r\n" "</head>" Name = "lightbox_plus part2" Active = TRUE URL = "$TYPE(htm)" Bounds = "$NEST(<a\s*>,</a>)" Limit = 1024 Match = "([^>]++href=)\0$AV((([^/]+//)\1|)(\2).(jpg|gif|bmp|png)\3(.html+|)\4(target="_blank"|)\5)\6" Replace = "\0"\1\2.\3\4" rel="lightbox" \5\6\0"\1\2.\3\4" target="_blank">□</a>"
873 名前:862 mailto:sage [2006/10/25(水) 16:10:20 ID:TjL9pAss0] フィルターお願いします。
874 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 16:47:46 ID:Gpa2YWWh0] Match = "$NEST($NEST(<div\s,*class=$AV(infomation)*,>),</div)\k" Replyace = "<!--kill-->" クラス属性って一回しか使えない(使わない)んだっけ? class="information"にマッチする部分を全て消すフィルタだから誤動作しても責任は持たん。 あとは自分で条件を絞って消したくないところを消さないように改良することだな。
875 名前:862 mailto:sage [2006/10/25(水) 17:27:09 ID:jr+Gvhks0] >>874 レスありがとうございます。 初心者なので [Patterns] Name = Active = URL = Limit = Match = "$NEST($NEST(<div\s,*class=$AV(infomation)*,>),</div)\k" Replace = "<!--kill-->" 後の項目もお願いします。
876 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 18:22:52 ID:aCwuBKGn0] >>874 classは何回でも使える。 IDは1回だけ。
877 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 18:24:01 ID:ls2H3Cmj0] >>874 は荒らし
878 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 18:45:32 ID:Gpa2YWWh0] 初心者かどうかなんて理由にならん。 どれだけ自分で挑戦したのか、調べたのかを書いた上で数点質問を書くのが筋じゃないのか。 実用するに当たっての情報はすでに与えられているはずなのだが。
879 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 18:49:01 ID:VKanZiVl0] >>862 おまえさん、以前もTV王国でフィルタうpして貰っていないか? もしそうなら、それを元に自分で改良してみる努力をしたらどうだろう。 スレの流れを切って作業を丸投げ、うpが遅いと乞い、 同一人物のイタズラのような気がしてしまうのだが。 そうでないならスレ内を検索すれば簡単に見つかる。
880 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/25(水) 19:21:48 ID:5FqRZ3c50] 流れを断ち切るようですが…。 >>868 > ...発生条件は分かりませんが100回を越えた時点で想定外なので調べる必要は無さそう。 すみません。再度、試してみたら、1000... が一つだけ出力されました。 試すフィルタを取り違えていたのかもしれません(汗) > すごい力技だw ははw 実は、他に100桁以上の数値はマッチしないフィルタも作ってみたんですが、どうにもシンプルに仕上がらなかったので、結果的にあの形に収まりました。 副次効果として、32桁以上の 999.... の処理が著しく高速化します。 必要ない人は、ブロックリストの一部をコメントアウトすればいいので、管理も楽だと思います。 >>870 > マッチングが1バイト進むごとに、999...90 の末尾までのテストを繰り返すから遅くなる あ…、確かに、 Match = "9+{1,*}(^[0-9])" だけでも、[プロファイル] でProxomitronが落ちますね。そうすると、対処法はこんな感じかな。 [Patterns] Name = "incremented by one [Match ver] [2006/10/25] beta2" Active = TRUE Limit = 32767 Match = "(^(^[0-8]9+(^[0-9])))($LST(Num-plus))+(^[0-9])|" "(^(^9))(^$TST(Numflag=1))$SET(#=1)((^(^9))$LST(Num-plus))+" "((^[0-9])|$SET(Numflag=1)$TST(Numflag=0))" Replace = "$SET(Numflag=)\@" ようやく、熟成してきた気がします。 いかがでしょう?
881 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/25(水) 19:24:36 ID:5FqRZ3c50] ところで、話題のグローバル変数ですが、フラグを立てる(ある条件に合致したら、フラグを立て、以降フラグが立っている場合はマッチさせない)目的で使うと、高速化できることがあります。 >880のフィルタはその典型ですね。 "Charset: Set global variable", "Replace character: 2byte -> 1byte" でも使った手法で、実際これらが実用的なレベルの速度で動作するのはグローバル変数の効果が大きいと思います。 正直なところ、当初は「『全角文字 → 半角文字』の変換は1文字ずつ置換するわけだから、遅くて使いものにならないだろう」と悲観的だったのですが、これほど実用的になるとは思ってもいませんでした。 フィルタを作成依頼した人に感謝感謝です。 >>853 ,867,872 フィルタ作成お疲れ様です。ちょっと見てみましたが、まだ改善の余地があると思います。 ---- lightbox_plus part1 </head> → (^(^</head>)) 実質的な動作は変わらないのですが、$STOP() を使うなら消費しなくても良いかなと。 ---- lightbox_plus part2 > Bounds = "$NEST(<a\s*>,</a>)" $NEST と * を組み合わせると不具合が生じることがあるので、Bounds = "$NEST(<a\s[^>]+>,</a>)" にした方がよいかと思います。 > Match = "([^>]++href=)\0$AV((([^/]+//)\1|)(\2).(jpg|gif|bmp|png)\3(.html+|)\4(target="_blank"|)\5)\6" ・(target="_blank"|)\5 の場所が明らかにおかしい (属性値に入ってます) ・(\2) は括弧が要りません (正規表現とは違いますので…) ・グループ化の場所を変えれば、変数の数をもう少し減らせるかも > Replace = "\0"\1\2.\3\4" rel="lightbox" \5\6\0"\1\2.\3\4" target="_blank">□</a>" □などの全角文字はそのままの状態で記入すると、Shift_JISのWebページでしか作用せず、Shift_JIS以外のWebページでは文字化けを引き起こしてしまいます。 なので、ここは半角文字にするか、実体参照を用いて記述してください。 ttp://abc.s65.xrea.com/prox/wiki/TIPS/#n22f5801
882 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 20:17:29 ID:6PSb8kEs0] >874について訂正。 \kと$STOP()を逆に覚えていたようで、ちょうど別のフィルタを作成中にそれに気がついたので訂正。 \kではなくて$STOP()が正しい。 Match = "$NEST($NEST(<div\s,*class=$AV(infomation)*,>),</div)$STOP()" Replyace = "<!--kill-->" ちなみにというほどでもないが、$AV()の中身をOR関数で二つ指定してやることで>862の望む動作をすることになる。 更に、件のウェブページにこのフィルタをOR関数を使うことで二回以上呼び出すことを試みる場合には $STOP()を発動する条件として何らかのフラグ判定が必要になるだろう。 例えばこうだ。 マッチする毎に$SET(TV=0$GET(TV))としてやる。 こうするとTV変数に詰まっている0の数から過去に何度呼び出されたかを知ることができる。 このフィルタが二度だけ呼び出されると分かっているなら($TST(TV=00)$SET(TV=)$STOP()|)とすることで 二度マッチして以降はこのフィルタをOFFにすることができる。
883 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 20:55:25 ID:6PSb8kEs0] 相対リンク→絶対リンクに関するアイデアがある程度形になったので書き込みます。 アイデアは以下の構成。 1:現在のURLの階層を数える $URL([^:]+:[^/]+/$SET(\0=1)([^./]+/$LST(increment)+) \0には現在の階層数の値が入る 2:../の数を数える ((../)$LST(decrement))+ ../を発見するたびに\0内の数を-1する 以上より(../)+の示す階層の深さを知ることができる 3:もう一度URLを下から辿りながら該当する階層まで上がる $URL( ([^:]+:)\# ([^/]+/)\#$LST(decrement)$TST(\0=[^0]) (([^./]+/)\#$LST(decrement)$TST(\0=[^0]))+ ) 階層を上がるたびに\0内の値を1ずつ減らし、その値が0になった時点でスタックに入っているURLが (../)+の示す階層。 なおincrementリストとdecrementリストはそれぞれ\0に入っている一桁の数字の値を1だけ増やす又は減らすリストです。
884 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 20:59:52 ID:6PSb8kEs0] 例) 現在のURLは vird2002.s8.xrea.com/proxomitron/about_proxomitron.html とします。 またhref="../download"なる相対リンクに飛びたい、という場合を考えます。 現在のURLの階層数は2です。 飛びたい先の相対リンクは../のグループを1つだけ持つので、 相対リンクの示す階層は2マイナス1から一階層目であることが分かります。 よって vird2002.s8.xrea.com/ が../の示す階層になりますので、 downloadを付け加えて vird2002.s8.xrea.com/download がこの場合の相対リンクの示す絶対リンクです。
885 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/25(水) 21:03:10 ID:6PSb8kEs0] 訂正。 incrementリスト/decrementリストは必ずしも一桁の数字を対象にはしません。 このリストを構成するに当たっては↑で議論されているフィルタを利用させていただくことになると思います。
886 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/25(水) 23:05:08 ID:5FqRZ3c50] ふぅ…、出来ました。フィルタ作りとは全く関係ないところで躓いていましたw [Patterns] Name = "ImagePopup lightbox_plus.js (1/2) [2006/10/25]" Active = TRUE URL = "$TYPE(htm)" Limit = 8 Match = "(^(^</head>))$STOP()" Replace = "\t<link href='local.ptron/lightbox_plus/lightbox.css ' charset='utf-8' type='text/css'>\r\n" "\t<script type="text/javascript" charset="utf-8" src="local.ptron/lightbox_plus/spica.js"></script>\r\n" "\t<script type="text/javascript" charset="utf-8" src="local.ptron/lightbox_plus/lightbox_plus.js"></script>\r\n" Name = "ImagePopup lightbox_plus.js (2/2) [2006/10/25]" Active = TRUE URL = "$TYPE(htm)" Bounds = "$NEST(<a\s,</a>)" Limit = 1024 Match = "([^>]++(\shref=$AV([^?#]++.(jpeg|jp[eg]|gif|png|bmp|ico|j2k)([?#]*|)))\1((^target=$AV(_blank))[^>])+)\#" "(target=$AV(_blank)([^>]+)\#|) \0" Replace = "\@ rel="lightbox"\0 <a\1><img></a>" 多分、これで>853氏の要望は全て満たせると思います。(少し私の好みが入っているので、気に入らない点は適宜改変してください。) 作ってから気がついたんですが、target="_blank" を消さなくても lightbox_plus は動作するんですね。(Wikiには target="_blank" が存在すると動作しないとありました) アクセシビリティの観点から、target="_blank" を敬遠する方もいると思いますので、とりあえずはこれで良しとします。
887 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/25(水) 23:11:51 ID:5FqRZ3c50] >886のフィルタについて。 lightbox_plus.js で指定されている画像ファイルのパスを書き直さなければならない点に注意して下さい。 該当箇所は "Event.register(window,"load",function() {" 以下にある記述です。 # 例) 'loading.gif' を 'local.ptron/lightbox_plus/loading.gif ' にする。 これに気がつくのに、ずいぶんと時間を消費しました…。 (^(^</head>)) を使用したのは、消費しない事による高速化の狙いもありますが、</head> に複数のフィルタがマッチできるようにするためでもあります。 「消費しない」ということは何度でもマッチできるということですので、もう一度、他のフィルタで </head> にマッチさせることが出来ます。 Multiを使用せずに、同様の効果を得られるのが利点です。 (実は、私の作ったフィルタで </head> にマッチするものがあるので、消費すると個人的に拙いのです…。) >>883-885 考察お疲れ様です。 > ../を発見するたびに\0内の数を-1する 私も同じ事を考えていました。インクリメント(+1) と デクリメント(-1) が必要ですよね。 一つ気になったのは置換スタックを使用している点です。 もし、>880ベースのフィルタを使うとしたら、既に使用されている置換スタックは使えません。 # 816氏のフィルタベースならバッティングしませんが、遅いとのことなので…。 どちらかのフィルタの置換スタックをグローバル変数に代替えするか、置換スタックを使わないアルゴリズムを考える必要がありますね。 >883は単純にグループ化して、ローカル変数に格納すれば良いような気もしますが、未検証のため自信なし…。
888 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/25(水) 23:20:54 ID:5FqRZ3c50] ごめんなさい。>886で少しミスしました。 2chで実体参照が有効なのを忘れて、そのまま投稿してしまいました。 下記が修正版になります。 お手数ですが、>886を適用された方は (2/2) だけ↓を取り込んでください。 # (1/2) は変わりありません。 [Patterns] Name = "ImagePopup lightbox_plus.js (1/2) [2006/10/25]" Active = TRUE URL = "$TYPE(htm)" Limit = 8 Match = "(^(^</head>))$STOP()" Replace = "\t<link href='local.ptron/lightbox_plus/lightbox.css ' charset='utf-8' type='text/css'>\r\n" "\t<script type="text/javascript" charset="utf-8" src="local.ptron/lightbox_plus/spica.js"></script>\r\n" "\t<script type="text/javascript" charset="utf-8" src="local.ptron/lightbox_plus/lightbox_plus.js"></script>\r\n" Name = "ImagePopup lightbox_plus.js (2/2) [2006/10/25] fixed" Active = TRUE URL = "$TYPE(htm)" Bounds = "$NEST(<a\s,</a>)" Limit = 1024 Match = "([^>]++(\shref=$AV([^?#]++.(jpeg|jp[eg]|gif|png|bmp|ico|j2k)([?#]*|)))\1((^target=$AV(_blank))[^>])+)\#" "(target=$AV(_blank)([^>]+)\#|) \0" Replace = "\@ rel="lightbox"\0 <a\1><img></a>"
889 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/26(木) 00:03:47 ID:4hgUqkpN0] 3:もう一度URLを下から辿りながら該当する階層まで上がる $URL( ([^:]+:)\# ([^/]+/)\#$LST(decrement)$TST(\0=[^0]) (([^./]+/)\#$LST(decrement)$TST(\0=[^0]))+ ) を置換スタックを用いないアルゴリズに修正するのは非常に簡単です。 むしろシンプルさの点でこちらのほうを先に考慮するべきでした。 $URL( ( ([^:]+:) ([^/]+/)$LST(decrement)$TST(\0=[^0]) (([^./]+/)$LST(decrement)$TST(\0=[^0]))+ )\1 ) $TSTとグループ化については検証しました。 マッチ欄 = "(((?)\0$TST(\0=[^0]))+)\1" 1文字読む毎にその文字が0でないかどうかをTESTし、最後の0までを\1に収めます。
890 名前:883 mailto:sage [2006/10/26(木) 00:05:45 ID:4hgUqkpN0] IDが頻繁に変わりますが>883-885です。
891 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/26(木) 02:31:16 ID:VSM6AvXD0] 改良ありがとうございます。 というか全面的に書いて頂いちゃいましたね。 自分で書いたものを直してもらうと勉強になります。
892 名前:816 mailto:sage [2006/10/26(木) 06:45:53 ID:XApi7DgO0] >>880-881 乙です。 フラグを使って二回目以降のマッチングをキャンセルさせたんですね、早速プロファイルで テストしたらバッチリでした。 グローバル変数を使うことで若干の速度低下はありますが安心して 使えるのでこちらのほうがいいですね、GJ。 自分も何通りかの回避策を考えていたんですが今までに出たフィルターより酷いものしか思い付かず 全部ボツになりました。 一番有力だったのが>>851 のフィルターに分岐をもう1つ付けた↓の案です。 (^(^[0-8]9+(^[0-9])))$LST(Num-plus)(9$SET(#=0))+ | (^(^9))$SET(#=1)(9$SET(#=0))+(^[0-9]) | (9+{1,*})\0 マッチングが3つ目の分岐に来る時は対象の数字が "999....9[0-8]" (←0〜8のどれか) ...のはずなので、 "999..." の部分を単独で消費させ、次のマッチングテストを [0-8] のところから再開させようという狙いでした。 しかしマッチ回数が増えると返って遅くなったりデバックモードが見づらくなるなどの副作用が激しい上に \0 か \@ のどちらを出力するかのフラグも必要になるので諦めました。 >全角文字 → 半角文字 グローバル変数も使い方次第ですね、とても参考になりました。 >>883 乙。
893 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/26(木) 20:53:13 ID:uv9TRhoo0] >796を参考にして 巨大な image/gif を読み込まないようにするものを書いてみたのですが、 いまのところ動作しません。 In = TRUE Out = FALSE Key = "Content-Length: large gif rejecter (in) (2006.10.26)" URL = "$IHDR(Content-Type: image/gif)" Match = "([#102400:*])\1" Replace = "\k" \kや$IHDRなどほとんど使わないので自信がないのですが、 何が間違っているのでしょうか。 一応、100KB以上のファイルを\kするようにしたつもりです。 テストしたURLでは、どちらのヘッダも送られてきています。 動作が確認されたら$LOGを追加してみようかと思っています。
894 名前:>>862>>875 mailto:sage [2006/10/26(木) 21:29:51 ID:J2Mj+u6C0] フィルタお願いします。
895 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/26(木) 21:48:29 ID:4hgUqkpN0] >894 もう誰もこれ以上教える気はないようだからそろそろ去ったらどうだ? 何も期待できないと思うぞ。
896 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/26(木) 21:55:09 ID:38SjBeFP0] インクリメントが一区切り付いたので、デクリメントも作成してみました。 [Patterns] Name = "decremented by one [Match ver] [2006/10/26] beta1" Active = TRUE Limit = 32767 Match = "(^(^[1-9](^[0-9])))$LST(Num-minus)(^[0-9])|" "(^(^0+(^[0-9])))((^(^0))$LST(Num-minus))+(^[0-9])" Replace = "\@" # $LST(Num-minus) 0$SET(#=9) 1$SET(#=0) 2$SET(#=1) 3$SET(#=2) 4$SET(#=3) 5$SET(#=4) 6$SET(#=5) 7$SET(#=6) 8$SET(#=7) 9$SET(#=8) 仕組みは>864とほぼ同じです。 # ブロックリストの長文(000...)とグローバル変数は、これで未知の問題がないことを確認してから取り入れていきます。 # シンプルなフィルタから作り始めないと、問題点を特定できないことが多いので。
897 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/26(木) 22:04:30 ID:38SjBeFP0] >>889 お疲れ様です。 ハードルはほぼ乗り越えた感じですね。 後は基礎からじっくりと固めていけば、「相対URL→絶対URL」の新しいフィルタが出来そうです。 >>892 テスト有り難うございます。 良かったら、デクリメントもテストしていただけると嬉しいです。 正直、デクリメントの方が簡単にできてしまって、拍子抜けしてますw >>891 画像のポップアップは私も興味ある機能でしたので、こちらこそ良い勉強になりました。 問題があったら、報告下さいね。 私のところでは、機能的には問題ありませんでしたが、少しWebページの読み込みが遅くなった気がします。 CSSで画像をロールオーバーさせるフィルタも作ってみたので、どちらが良いか比較中です。
898 名前:think ◆MM0nnAOCiQ mailto:sage [2006/10/26(木) 22:24:12 ID:38SjBeFP0] >>893 流してしまってすみません。 > \kや$IHDRなどほとんど使わないので自信がないのですが、何が間違っているのでしょうか。 \k は間違いないと思いますが、$IHDR の場所が変かもしれません $IHDR を検索表現に置いてみてはどうでしょう? 私の環境では、それで動作しました。 # 「検索表現, 置換テキスト」に適用できるマッチングコマンドでも、URLマッチに指定できるとは限らないようです。 # URLマッチで動作しなかったら、検索表現へ移してみてください。
899 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/27(金) 00:29:26 ID:bF00szPi0] >852 すでにこの段階で既出だったんですね。 スレを追ってなかったので読み落してました。 でフィルタですが、実はインクレメントリストをまだ作っていないので現段階で完成はできませんが、それ以外は完成したと思います。 Name = "URL" Active = FALSE URL = "$TYPE(htm)" Limit = 256 Match = "$NEST(<a\s,\1href=$AV(((../)+)\2(*)\3)(*)\4,>)" "$URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)" "$TST(\2=(../$LST(decrement))+)" "$URL(([^:]+://[^/]+/$LST(decrement)$TST(\0=[^0])([^./]+/$LST(decrement)$TST(\0=[^0]))+)\5)" Replace = "<a \1href="\5\3"\4>" ../を発見することがこのフィルタの発動条件なので、手順は以前のものとは少し変わります。
900 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/27(金) 00:32:14 ID:bF00szPi0] 解説 $NEST(<a\s, \1 href=$AV(((../)+)\2(*)\3) (*)\4 ,>) \1と\4にはhref="hogehoge"の以前の部分と以降の部分がそれぞれ入る。 \2には(../)+が入る。 \3には../ループより後ろの残りのURLが入る。 $URL( [^:]+:// [^/]+/$LST(increment) ([^./]+/$LST(increment))+ ) 現在のURLの階層の深さを測る。 階層情報は\0に保存するとする。
901 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/27(金) 00:32:46 ID:bF00szPi0] $TST(\2=(../$LST(decrement))+) \2に入っている../ループの数だけ引き算する。 $URL( ( [^:]+:// [^/]+/$LST(decrement)$TST(\0=[^0]) ([^./]+/$LST(decrement)$TST(\0=[^0]))+ )\5 ) 階層を1つ下りるごとに\0をー1しながら \0が0になるまで階層を下りていく。
902 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/27(金) 00:41:37 ID:bF00szPi0] 追加ですが、相対リンクを使うようなページの場合はほかのリンクも相対リンクである確率が高いので、 現在居る階層の深さ情報はグローバル変数に蓄えたて再利用できます。 すでに深さが既知の場合にはいくらか処理がシンプルになります。 そこで深さを測る処理に手を加えます。 ( $TST(SWITCH=1) $SET(\0=URL) | $URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+) $SET(URL=\0)$SET(SWITCH=1) ) とします。 グローバル変数は他のURLに飛んだ時点でリセットされると記憶しています…。 この場合はSWITCH変数とURL変数はURLが変わったときにリセットされる必要があります。
903 名前:893 mailto:sage [2006/10/27(金) 00:57:45 ID:euP+G8PW0] >898 どうもありがとうございます。 $IHDRの場所も疑ってはいたのですが、 検索表現であればどこに使ってもよいのだろうと思ってそのままにしていました。 ヘッダの URL: ○○ あたりと連携させないとだめなのかと思っていたところですが、 Match = "$IHDR(Content-Type: image/gif)([#102400:*])\1" これであっさり動作しました。場所が重要だったとは……。 Server: Proxomitron というヘッダもついてきます。
904 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/27(金) 14:58:28 ID:yTsXlKfw0] 内容の濃いスレになったね。 落ちないうちに保存しておこうっと。
905 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/27(金) 15:33:23 ID:cpcnkQie0] 昨日、寝る前にベッドの中で思いついたアイデアを今思い出したので、書き残しておきます。 hrefの中で../を発見することが相対リンク→絶対リンクの発動条件ですが、これを肯定先読みを使うことで よりスマートに、より複雑に、より分かりづらいフィルタに(w)することができます。 href=$AV((^(^../)) この段階でフィルタの発動条件を満たします。 この直後に現在いる階層の深さを測ります。(>902をそのまま利用) ($TST(SWITCH=1)$SET(\0=URL)| $URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)$SET(URL=\0)$SET(SWITCH=1)) そしてhref内の../を数え上げて、decrementによって引き算します。 (../$LST(decrement))+(*)\3 最後に>900をそのまま利用します。 以上より Match = "$NEST(<a\s,\1href=$AV((^(^../))($TST(SWITCH=1)$SET(\0=URL)|" "$URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)$SET(URL=\0)$SET(SWITCH=1))(../$LST(decrement))+(*)\3)(*)\4,>)" "$URL(([^:]+://[^/]+/$LST(decrement)$TST(\0=[^0])([^./]+/$LST(decrement)$TST(\0=[^0]))+)\5)" Replace = "<a \1href="\5\3"\4>" href=$AV()の中に詰め込んだだけで、それ以外は何も変わりません。
906 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/27(金) 16:26:44 ID:cpcnkQie0] ウェブ上での動作確認版 Name = "URL" Active = TRUE URL = "$TYPE(htm)" Limit = 256 Match = "$NEST(<a\s,\1href=$AV((^(^../))($TST(SWITCH=1)$SET(NUM=$GET(URL))|" "$URL([^:]+://[^/]+/$SET(NUM=1)([^./]+/$LST(increment))+)$SET(SWITCH=1)$SET(URL=$GET(NUM)))(../$LST(decrement))+(*)\3)(*)\4,>)" "$URL(([^:]+://[^/]+/$LST(decrement)$TST(NUM=[^0])([^./]+/$LST(decrement)$TST(NUM=[^0]))+)\5)" Replace = "<a \1href="\5\3"\4>" incrementリストの中身 *********************************************** $TST(NUM=1)$SET(NUM=2) $TST(NUM=2)$SET(NUM=3) $TST(NUM=3)$SET(NUM=4) $TST(NUM=4)$SET(NUM=5) $TST(NUM=5)$SET(NUM=6) $TST(NUM=6)$SET(NUM=7) $TST(NUM=7)$SET(NUM=8) $TST(NUM=8)$SET(NUM=9) $TST(NUM=9)$SET(NUM=A) $TST(NUM=0)$SET(NUM=1) ************************************************
907 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/28(土) 02:01:34 ID:K8mTgtv60] 韓国とか朝鮮という言葉を一切目にしたくありません。そういうフィルターをお願いします。
908 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/28(土) 02:05:21 ID:KHlbWOOD0] &の基本的な使い方がまだよくわかっていないようで、つまずいています。 Bounds = "<textarea\s*>" Limit = 128 Match = "*(*cols=$AV([#51:*])\1)&(*rows=$AV(\2))" Replace = "<textarea cols="50" rows="\2" title="large textarea resized - \1">" textarea の cols が大きいと横スクロールバーが発生するので、 それを防ぐためのものです。 上のMatchだと、\2の中身が数字にとどまらず、余計なものまで入れてしまうようです。 $AVを使うことで属性値を正しく解釈してくれるものと期待したのですが、 うまくいっていないようです。 textarea は空要素ですが、空要素でないものでは、 上記のような方法で望み通りの結果が出ています。 テスト用サンプル <textarea rows="20" id="sample" cols="100"> <textarea cols="100" rows="20" id="sample">
909 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/28(土) 02:29:52 ID:z3Kpim4u0] textareaの中のcols属性の値が50を超える場合は50にして、それ以外は変更しない、というフィルタでOK? こんな感じになると思う。 マッチ欄だけね。Boundsは使わない。 $NEST(<textarea\s,*cols=$AV([#51:*])*,>) NESTをこのように使うと","と","の間には以下のような文字列がはまる。 <textarea rows="20" id="sample" cols="100">なら rows="20" id="sample" cols="100" <textarea cols="100" rows="20" id="sample">なら cols="100" rows="20" id="sample" そしてアスタリスクサンドイッチによって*cols=$AV(hogehoge)*としてやると cols属性の前部分と後ろ部分は*(アスタリスク)によって消費する。 俺の場合はNESTとアスタリスクサンドイッチは、一つの属性だけに着目するときに常用する常套手段だね。 他の人だったらまた別の手法を常用しているのは↑のフィルタ例を見れば分かる通りで、唯一の解はない。 あとはアスタリスクで消費される部分をローカル変数に収めてやればよい。 \1cols=$AV(hogehoge)(*)\2 このようにね。 このローカル変数をそのまま利用するのであればReplace欄は以下になる。 <textare \1cols="50"\2> 以上より Match = "$NEST(<textarea\s,\1cols=$AV([#51:*])(*)\2,>)" Replace = "<textare \1cols="50"\2>" がお望みのフィルタとなると思う。 &は使ったことがないので、もし&の使い方を勉強がしたかったのなら力になれずスマソ。 人によって書き方って全然違うからね・・・。
910 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/28(土) 02:32:49 ID:z3Kpim4u0] 書き忘れたけどNEST+アスタリスクサンドイッチの書き方はかなわずこうでなきゃいけないので注意。 $NEST(tagname\s,*hogehoge=$AV(foobar)*,>)
911 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/28(土) 09:46:21 ID:9IGS2CbP0] memo : ([^?#/]+/)\#+{1,*}
912 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/29(日) 20:48:09 ID:Y14y3roy0] 久々にイメージ検索をした時に気づいたんだけど、 google image (060810_kai) +js+がたまに悪さをして、 イメージ部分が表示されない時があるみたい。 なんでだろう。 あと以前のgoogle imageは、画像をクリックするとオリジナルのサイズの画像で表示されたけど、 これだと画像サイズが固定された状態に拡大縮小されてしまってるかも。 もし良かったら修正お願いしマッス。
913 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/30(月) 22:25:46 ID:4HUAuLcP0] こんばんは。 もしご存知の方がいれば教えて頂きたいのですが、よろしいでしょうか? >>160 さんの回答で出てくると同じオンラインゲーム「Livly Island」の 「技」のなかで特定の物を表示できなくしたいのですが、できるのでしょうか。 もし、技swfをシャットアウトしてしまう方法をご存知の方がいらっしゃいましたら、 よろしくお願いいたします。 (アクションスクリプトかどうかはわかりません。Flashやったことないもので…)
914 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/31(火) 17:55:19 ID:8orGPcrc0] 既出なので今更と思うかも知れないが、 Livly Island 関係のフィルタはゲームのモラルやポリシーに関わるものが多い。 このスレでは扱わない方がいいだろうと思うんだ。 基礎さえ知っていれば難しいことじゃないし、 あちらの専用スレでも自力でできることが前提だと言われていたしな。
915 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/31(火) 18:42:34 ID:8orGPcrc0] >>913 確認してきたらマルチじゃないか。 向こうで追っ払われたからってこちらに来ないでくれよ。
916 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/01(水) 17:03:39 ID:lqgq8ohV0] 特許庁のIPDL公報テキスト検索 www7.ipdl.ncipi.go.jp/Tokujitu/tjkta.ipdl?N0000=108 の検索結果を新しいタブ(ウインドウ)で開きたい。 下のような、フィルタではうまく行かなかった。 submitの値をreturnしてwindow.openと組み合わせればできそうなんだけど。。 [Patterns] Name = "IPDL new tab opener" Active = TRUE Limit = 256 Match = "HREF="JavaScript:ListSubmit" Replace = "HREF="JavaScript:window.open"
917 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/01(水) 20:40:48 ID:egiE4oOy0] >>151 = >>913 の可能性がドロリ濃厚な件。
918 名前:think ◆MM0nnAOCiQ mailto:sage [2006/11/03(金) 00:42:38 ID:508VMIZd0] >>905-906 遅レスで申し訳ありません。 あれから、他のフィルタに夢中になってしまいまして、デクリメントから遠ざかっていました。(汗) そちらは一区切り付いたので、またデクリメントに挑戦してみようと思います。 で、改めてみて気がついたのですが、検索表現で$TSTする都合上、グローバル変数を使わざるを得ないのですね。 そういう意味で、\#に拘ったのは無意味だったかもしれません。 >>908 まだ見ていますか…? とりあえず、& は使わなくて良い気がします。 title属性で格納したい対象がよく判りませんが、私なら以下のように書きます。 Match = "(<textarea\s[^>]++cols=)\0$AV(([#51:*])\1)" Replace = "\0"50" title="resized cols \1 -> 50"" >>909 お疲れ様です。 細かなことですけど、(*)\2 は \2 にして大丈夫です。 $AVの括弧はグループ化ではありませんので、\2はアスタリスクと同じように働き、消費されます。
919 名前:823 mailto:sage [2006/11/03(金) 00:59:24 ID:c1M+0JK70] >>823 のヘッポコmixiフィルタを書いたものです。 ちょっぴり訂正 |(<(table|td)\s[^>]++width=)\2$AV(710)([^>]+>)\3 の下に、 $URL(^mixi.jp/view_bbs.pl ) が必要だす。 高度な内容が並ぶなか、お恥ずかしい。 $NEST恐怖症を解消して綺麗なフィルタ書きを目指したいな。
920 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/03(金) 01:23:21 ID:zp3j1wvA0] goooooogleimageが効かねー。誰か作り直し頼んだ
921 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/03(金) 11:37:12 ID:wGQAznhc0] [Patterns] Name = "Google image redirector [061103]" Active = TRUE URL = "images.google." Limit = 1024 Match = "var\ e=\"/imgres\?imgurl=\"\+\0\+\"\&imgrefurl=\"\+\1\+[^;]+;c\+=\"<a href=[^>]+>$STOP()" "$SET(9=c+="<a href="+unescape(\1.match(/^[^&]+/))+" target=_blank>Link</a><a target=_blank href="+unescape(\0)+">)" "|" "<a href=/imgres\?imgurl=\0\&imgrefurl=\1\&h=*>" "$SET(9=<a href=$UESC(\1) target=_blank>Link</a><a href=$UESC(\0) target=_blank>)" Replace = "\9"
922 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/03(金) 11:38:48 ID:wGQAznhc0] [Patterns] Name = "google image (061103) +js+" Active = TRUE URL = "images.google.co(.jp|m)/" Limit = 1024 Match = "var\ e=\"/imgres\?imgurl=\"\+\0\+\"\&imgrefurl=\"\+\1\+[^;]+;c\+=[^;]+;[^;]+;[^;]+;$STOP()" "$SET(9=var e=unescape(\1.match(/^[^&]+/));var proxvar=\0;" "c+="<a href="+e+" target=_blank>imgref</a> / <a target=_blank href="+unescape(proxvar)+">img</a><br>" "<img ondblclick='this.src="+'"";this.style.display="none"'" "+"' onclick='if(this.a){this.src=this.a;this.a=0}else{this.a=this.src;this.src="+'"http://'+unescape(proxvar)+'"}'" "+"' src=/images?q=tbn:"+b.d+proxvar+">";)" "|" "<a href=/imgres\?imgurl=[^&]+\&imgrefurl=([^&]+)\0[^>]+> <img[^>]++(src=/images\?q\=tbn:[^:]+:([^ >]+)\2)\1*</a>" "$SET(9=<a href="$UESC(\0)" target="_blank">imgref</a> / <a href="\2" target="_blank">img</a><br>" "<img ondblclick="this.src='';this.style.display='none'" onclick="if(this.a){this.src=this.a;this.a=0}else{this.a=this.src;this.src='\2'}"\1</a>)" Replace = "\9"
923 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/03(金) 12:33:11 ID:P23w4aje0] >>921 ありがとうございました。
924 名前:908 mailto:sage [2006/11/04(土) 17:53:30 ID:BDG40CNw0] 遅くなりましたが、どうもありがとうございます。 望むフィルタを書くことができました。 >909 $NESTを使いこなすといろいろ便利そうですね。 テクニックのひとつとして覚えておきます。 >918 Boundsを積極的に使おうという風に頭が働いてしまうので、 そのように考えることができませんでした。 必要ならばBoundsを使わないようにするということも頭に入れておきます。 私はフィルタ作成時にtitle属性をよく使いますが、 フィルタがマッチする前にどう書かれていたのかをわかりやすくするために利用しています。 >908の場合だと、本来HTMLを書いた人がcols=$AV([#51:*])\1としたかったのを 書き換えるわけで、書き換える前のcolsの値がすぐにわかります。 >908でtitle属性で格納したい対象は、colsの値です。 書き換えたことが一目でわかるとアクセス性の向上などにつながると思いますし、 デバッグの際にも役立ちます。
925 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/04(土) 19:49:29 ID:BDG40CNw0] Bounds = "<pre*<pre>" Limit = 1024 Match = "(\#(\r\n|\r|\n)+{5,*})+" Replace = "\@" pre要素の中に改行が連続していると縦にページが長くなるため、 改行が5つ以上あった場合<br>と見なして削除するフィルタです。 (こういう場合は論理目的でpre要素を使っていないものと判断します) \#と\@の練習も兼ねています。 改行コードだけ削除してくれればよいのですが、いまのところ動作しないようです。 たぶんMatchがまずいのだろうと思うのですが、何が間違っているのでしょうか?
926 名前:think ◆MM0nnAOCiQ mailto:sage [2006/11/04(土) 21:14:59 ID:qgIOVES+0] またやってしまいました…。 >918を取り込んでいたら、以下に差し替えてください。 Replace = "\0"50" title="resized cols \1 -> 50"" >>924 > デバッグの際にも役立ちます。 確かに便利ですよね。置換内容がすぐに判る仕組みを作っておくと早期バグ発見に貢献すると思います。 >>925 目の付け所はよいと思いますが、ケアレスミスで失敗しているようです。 1. Boundsの終了タグを </pre> にする 2. 検索表現の最後に \# を加える 3. (\r\n|\r|\n) を (\r\n|[\r\n]) にする (どっちでも良いのですけど、文字クラス化した方がすっきりします) これで、期待通りに動作すると思います。 特に、2. が躓きやすいところかもしれません。 (...)+ で再帰的に処理させる場合は、その表現でどこまで消費されるかをシミュレーションしてください。 この場合、「5回以上の改行」まで消費されますが、そのままでは </pre> が残るためマッチしない、ということになります。
927 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/04(土) 22:56:39 ID:BDG40CNw0] >926 どうもありがとうございます。ものすごいケアレスミスをしていますね……。 \#を使う前に*あたりで実験してもみたのですが、 preの閉じ忘れに気づかなかったことで全部台無しです。
928 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/04(土) 23:06:57 ID:wS+Fn6Tk0] >>925 のが動かないときはまず Bounds = "<pre*<pre>" Limit = 1024 Match = "*" Replace = "Match!" みたいに簡単なフィルターを書いて試すといいよ、これは動かないのでこの中に原因があると分かる。
929 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/05(日) 16:53:08 ID:H3/sRPVo0] MyYahooのFLASHと[PR]を消してください・・・ my.yahoo.co.jp/
930 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/05(日) 21:50:02 ID:OFSGT4Qa0] >>929 アプロダにあるKoukoku Eraserっつうのに入ってるフィルタで消えるよ [Patterns] Name = "Yahoo AD Killer" Active = TRUE URL = "(^serch|blogs)[^/]++.yahoo.co.jp/" Limit = 5000 Match = "$NEST(<!-- (-|) (Ad(Space|\ [^>]++ (^(^(-|)-->)))\1|YBB( module|_UnderBanner)|// AD\([a-z/]+\)|SPECIAL CONTENTS MODULE START)" ",<!-- (-|) (/(Ad$TST(\1)|YBB( module|_UnderBanner)) [a-z]+|(//|) /AD\([a-z/]+\)|SPECIAL CONTENTS MODULE END) (-|)-->)|" "$NEST(<div align=$AV(center)>,</div>)" "( <img src="[^.]+.yimg.jp/images/clear.gif" width=1 height=6 border=0><br>|(^(^<script language=javascript> if\(window.yzq_d==null\))))|" "<table\s[^>]+> <tr(\s[^>]+|)><td\s[^>]+>(<[^>]+>|)" "<b>([%C3][%ED][%CC][%DC][%A4][%CE][%BE][%F0][%CA][%F3]|(\ |)PR)</b>($INEST(<table,</table>)|*)</table>|" "(\[PR\] |)$NEST(<a\s[^>]++href=$AV(ard.yahoo.co.jp/ (M|SIG)=*),</a>)|" "$NEST(<script,*://ard.yahoo.co.jp/M=*,</script>)|" "<img\s[^>]++src=$AV(ai.yimg.jp/* )*>"