&
&&
これは言葉で説明するだけでは解りづらいと思いますので、例を挙げます。
<img
src="..."
height="50"
width="100"
/
>
上のソースの height属性, width属性 にマッチさせるフィルタを考えます。
ただし、height属性, width属性 の順番はランダムで規則性がありません。
この場合はAND関数を使う事で、どちらの順番でもマッチさせる事ができます。
[^>]++height=$AV(50)
と [^>]++width=$AV(100)[^>]+>
で同じ場所を2度チェックする事で解決しています。
ここで [^>]+>
に注目して下さい。
AND関数を使った場合、Proxomitronは2つのパターンの内、「より多く消費した方」に合わせて、文字列を消費します。
従って、より多くの文字列を消費した [^>]++width=$AV(100)[^>]+>
の分だけ文字列を消費することになります。
# この場合は、OR関数で条件分けする手もありますので、用途を考えて使い分けて下さい。
ダブルアンバサンドはAND関数よりも更に複雑です。
ダブルアンバサンドは左のパターンと右のパターンを同じだけ消費しなければならないからです。
これはBoundsと同じ働きをするので、Boundsを使った経験のある方なら理解しやすいでしょう。
次のhtmlソースのimg要素をURI指定でマッチさせるフィルタを考えてみます。
htmlソース<img
src="http://adserver.com/ad.gif"
height="50"
width="100"
/
>
<img\s[^>]++src=
という書き方もあるが、そんな複雑な書き方はしたくない。
そんな時に、ダブルアンバサンドは有効に使えます。
<img\s[^>]+>&&*src=$AV(http://adserver.com/ad.gif)*
まず、<img\s[^>]+>
まで消費します。
次に、左のパターンで消費した範囲で src=$AV(http://adserver.com/ad.gif)
を探します。
このように、同じ場所を2度探すことでフィルタの表現を簡単なものにすることが出来ます。
反面、<img\s[^>]++src=$AV(http://adserver.com/ad.gif)[^>]+>
のように一度に検索する表現と比べて、遅くなるという欠点も併せ持っています。
速度を重視するか、簡易的な表現を求めるか、を考えて選択すると良いでしょう。
# ダブルアンバサンドはAND関数よりも消費する文字列が多いので、AND関数よりも遅くなります。