今までに作成した広告削除系のProxomitron用フィルタを1つにまとめてみましょう。
フィルタは複数あっても良いですが、1つにまとめた方が管理しやすい事もあります。
最も簡単なのは、OR関数でまとめる事です。
Kill a,img,iframe ad type1[Patterns] Name = "Kill a,img,iframe ad type1" Active = TRUE URL = "$TYPE(htm)" Limit = 256 Match = "$NEST(<a\s[^>]++href=$AV(http://sample.adserver.co.jp/),</a>)|" "<img\s[^>]++src=$AV(../sample_ad/ad[12].png)[^>]+>|" "$NEST(<iframe\s[^>]++src=$AV(../sample_ad/iframe_ad.html),</iframe>)"
OR関数はOR条件を設けて、そのどれかの条件にマッチすれば真を返すメタキャラクタです。
単純ですが、速度的にも効率が良くお勧めできる表現です。
今度はBoundsを使用してみます。
Kill a,img,iframe ad type2[Patterns] Name = "Kill a,img,iframe ad type2" Active = TRUE URL = "$TYPE(htm)" Bounds = "$NEST(<a\s,</a>)|<img\s[^>]+>|$NEST(<iframe\s,</iframe>)" Limit = 256 Match = "[^>]++(href|src)=$AV(../sample_ad/*|http://sample.adserver.co.jp/*)*"
Boundsは検索表現で検索する前に、検索範囲を制限します。
予め、検索範囲を縛っておいてから、検索表現で再度テストするわけです。
[^>]++(href|src)=
属性値を検索するため、[^>]++
と記述します。
次に、href属性, src属性 のどちらかにマッチさせるため、(href|src)=
を追記します。
[^>]++(href|src)=$AV(../sample_ad/*|http://sample.adserver.co.jp/*)*
img要素とiframe要素においては、src属性値は相対パスで "ad" のディレクトリを指定しています。
a要素においては、http://sample.adserver.co.jp/*
でhref属性値にマッチさせます。
最後に、アスタリスク で残りの文字列を消費します。
OR関数でまとめたフィルタと比べると、見た目がすっきりしてますね。
Boundsは速度的には遅いという欠点がありますが、管理しやすいので汎用的なフィルタによく使われます。