DLのためのProxomitron(7)
前回書いたような「ワイルドカードの限界性」というのは、フィルタ作成時に設定している「バイト制限」にも関係しています。これまでは「特に気にせず文字数を数えて設定すればOK」と書いてきたんですが(そして結論的にはそれで良いのですが)、この意味について。
「バイト制限」とは、「そのフィルタを(ウェブページソース内の)最大何文字(何バイト)に対して適用させるか」という制限です。何故これが重要なのか、DLのためのProxomitron(6)で書いたような「誤動作(意図しない変数代入)」のメカニズムを理解した上でなら簡単に理解できると思います。
例えば
そして、逆の言い方をすれば、「全体が○○文字(バイト)以下」という条件でしか「誤動作」を防いでいない以上、このような方針では、いわゆる「(『特定サイト向け』ではない)汎用的なフィルタ」を書くことができない。例えば「mailtoブラクラを防ぐ」というフィルタにしても、「mailtoブラクラの文字数は?」という問いに答えることが不可能だからです。それはサイトによって違うし、上記のような「誤動作」を「バイト制限」でしか防いでいない以上、「バイト制限」を設定しなければそのフィルタは「誤動作の多いフィルタ」になってしまう。
なお、「特定サイト(別に必ずしも画像掲示板でなくても良いです)用にフィルタを書いてみたのだが動かない」という場合
「バイト制限」とは、「そのフィルタを(ウェブページソース内の)最大何文字(何バイト)に対して適用させるか」という制限です。何故これが重要なのか、DLのためのProxomitron(6)で書いたような「誤動作(意図しない変数代入)」のメカニズムを理解した上でなら簡単に理解できると思います。
例えば
(前略)こういうウェブページを
<a href="http://www.tokix.net/putimg.cgi?file=111.jpg"><img src="http://www.tokix.net/thumb111.jpg"></a>
<a href="http://www.tokix.net/putimg.cgi?file=112.jpg"><img src="http://www.tokix.net/thumb112.jpg"></a>
(後略)
(前略)というように書き換えたい場合
<a href="http://www.tokix.net/img/111.jpg"><img src="http://www.tokix.net/thumb111.jpg"></a>
<a href="http://www.tokix.net/img/112.jpg"><img src="http://www.tokix.net/thumb112.jpg"></a>
(後略)
- Match: <a href\="http://www.tokix.net/putimg.cgi\?file\=(*)\1">
- <a href="http://www.tokix.net/putimg.cgi?file=111.jpg">
- <a href="http://www.tokix.net/putimg.cgi?file=111.jpg"><img src="http://www.tokix.net/thumb111.jpg">
- <a href="http://www.tokix.net/putimg.cgi?file=111.jpg"><img src="http://www.tokix.net/thumb111.jpg"></a>
<a href="http://www.tokix.net/putimg.cgi?file=112.jpg"> - <a href="http://www.tokix.net/putimg.cgi?file=111.jpg"><img src="http://www.tokix.net/thumb111.jpg"></a>
<a href="http://www.tokix.net/putimg.cgi?file=112.jpg"><img src="http://www.tokix.net/thumb112.jpg">
明記しませんでしたが、「*」の「あらゆる文字列」の「文字」は改行コードをも含みます。つまり、改行コードを含む文字列(複数行の文字列)でも変数に代入され得る。上の例で後ろ二つは「改行コードを含む文字列が\1に代入されている」。
これを「一通りしかあり得ないように限定」するために、「全体が○○文字(バイト)以下」という条件を設定していた訳です。そして、逆の言い方をすれば、「全体が○○文字(バイト)以下」という条件でしか「誤動作」を防いでいない以上、このような方針では、いわゆる「(『特定サイト向け』ではない)汎用的なフィルタ」を書くことができない。例えば「mailtoブラクラを防ぐ」というフィルタにしても、「mailtoブラクラの文字数は?」という問いに答えることが不可能だからです。それはサイトによって違うし、上記のような「誤動作」を「バイト制限」でしか防いでいない以上、「バイト制限」を設定しなければそのフィルタは「誤動作の多いフィルタ」になってしまう。
文字数だけでなく文字種や文字列性質など様々な要素によって「代入される文字列」を限定する方法は他にもありますその時に使うべき「限定条件」こそが「正規表現」「Proxomitron独自ルール」であり、この連載が扱っていないポイントです。
初心者が特定サイト用のフィルタを書くためなら「フィルタの書き方」ってのは結構簡単に説明できる(Proxomitronを既に使える人はここ見てないと思いますがもしいたら、ということで言い訳しておきますが、そのために「DLのための」なんですよ)当サイトが「初心者向け」として解説できるのはとりあえずここまでです。ここから先は、ここまでの内容を踏まえた上でどうやって「動く」フィルタを書くか考えるか、正規表現やProxomitron独自ルールを学ぶかして下さい。
※参考個人的には、「まず『正規表現』の基本的な仕組みを理解する、次にProxomitron用正規表現(マッチングルール)を覚える(その上でCGIプログラムとかに応用するかは人それぞれ)」という順序を推奨します。
【なかま】's HP
初心者向けに分かりやすい正規表現講座。ただしProxomitron用ではないので注意。
マッチングルール
Proxomitron用の正規表現(マッチングルール)解説。ただし「正規表現って何」という人が見て分かりやすいかと言えば「?」なので注意。
正規表現メモ
網羅的な内容。ただし初心者が最初に見て分かりやすいかと言えば「?」なので注意。「Proxomitronを使う上で必要な文献か?」と言うのも「?」なので、この連載的には「Proxomitronをある程度使えるようになった上で、CGIプログラムか何かで同じように正規表現を使いたくなったときにどうぞ」という感じです。その目的においては非常にまとまったページなので。
なお、「特定サイト(別に必ずしも画像掲示板でなくても良いです)用にフィルタを書いてみたのだが動かない」という場合
- メールで対象サイトのURLと自分が書いたフィルタ、どのような問題が起きたかを送る(コメントだとタグ無効化とか色々でフィルタを書くのが大変だと思うので)
- 送った旨をこの記事になりコメントで残す(正直webmasterアドレスはあんまチェックしてないので一応お願いします)

TrackBack
この記事へのトラックバック