![]() |
MatchingRulesTop / MatchingRules 最終更新: 2018-05-06 (日) 08:34:52 (1860d) |
アルファベットの大文字小文字は区別されない(正規表現で言う i フラグが常に指定されている状態)。
[%HH] で指定した場合は区別される。 ただし 4.5June+3 未満のバージョンでは区別されない(各バージョンの違い#v4-5june338参照)。
メタキャラクタ = メタ文字 = 特別な意味/効果を持つ特殊な文字 ※それ以外の普通の文字と、エスケープして特別な意味を無くしたメタ文字はリテラル(literal) と呼ばれる。
メタキャラクタ以外の文字は、それ自体とマッチする。
メタキャラクタは、メタキャラクタの直前に \ を置きエスケープする事で、特殊な意味を無効にする事が出来る。
例 * = 全てにマッチ \* = 文字「*」(0x2a)にマッチ
エスケープに使用する(エスケープしたい文字の前に置く)
¥ = \ = 0x5C
※環境や使用フォントによって、0x5Cはバックスラッシュ(\の半角)か、円記号(¥の半角)になる
全ての入力欄 でエスケープするべき文字
&|?*+[]()"'\=^$ 半角スペース
[ ] 内でエスケープするべき文字
%-]
[ ] 内の先頭でエスケープするべき文字
#
$SET() 内でエスケープするべき文字
()\
?+ の直後にエスケープするべき文字
{
ブロックリストの行頭でエスケープするべき文字
# ~ 半角スペース 非ASCII文字(パッチあてればエスケープ不要)
※「半角スペース」は \s で代用可能です。
※「"= 半角スペース」はエスケープしなくても大丈夫なことが多いようです。
"と'にマッチする。\"の様にエスケープすると、"にのみマッチ。 ["]の様に文字クラス化した場合も、"にのみマッチするので注意。
"*'は特別に用意された表現であり、
がマッチする。例えばonclick="*' が以下のどの記述にもマッチする。
onclick="alert('OK!')" onclick="alert(\"OK!\")" onclick='alert("OK!")' onclick='alert(\'OK!\')'
1つ以上の空白文字にマッチ。空白文字とは次の文字である:
NUL(0x00) , HT(0x09) , LF(0x0A) , CR(0x0D) , SPC(0x20)
文字クラス内では使用できない。「[\s]」は「s」というアルファベットそのものにマッチしてしまうので注意。
スペースがあっても無くても良い場合は \s+ と書くことが出来る。 動作は (半角スペース) と同じだが、編集時にうっかり消してしまうことを防止出来る。
\s は文字列末尾にもマッチする。この場合、"(^?)" と同じ働きをする。
0個以上の空白文字にマッチ。空白文字とは次の文字である:
NUL(0x00) , HT(0x09) , LF(0x0A) , CR(0x0D) , SPC(0x20)
半角スペース一つにのみマッチさせたい場合、「[ ]」の様にする。※[ ]は0x20以外にはマッチしない
0個以上の空白文字=0個以上の空白文字 にマッチする。(HTMLタグを処理する際=の左右のスペースを考えなくて良いので便利)
\=の様にエスケープさせると=にのみマッチする。 [=]の様に文字クラス化した場合も、=にのみマッチする。
空白文字と「>」を含まない0個以上の文字列にマッチ。[!-=?-%FF]++ とほぼ同じ。
文字クラス内では使用できない。「[\w]」は「w」というアルファベットそのものにマッチしてしまうので注意。
後ろの検索表現が )、 |、 &、&&、などの場合、後ろを見ないマッチングをする。
⇒ \wabc はマッチするが (\w)abc はマッチしない。
任意の一文字(1バイト)にマッチ Perlの正規表現で言う所の「.」
空を含む、全てにマッチ 最左最短一致、非欲張り、控えめ (non-greedy) Perl5の正規表現で言う所の「.*?」 アスタリスク
Match = "(*b)\0" Replace = "[\0]" 対象 = "abbbbc" 結果 = "[ab][b][b][b]c" Match = "(*b)\0c" Replace = "[\0]" 対象 = "abbbbc" 結果 = "[abbbb]"
「?++」と「*」は全く同じではない
*は特別で、最長一致(Perl5の正規表現で言う所の「.*」)になることもある
最長一致になる条件は、検索語の最後に使われている事と思われる
例 Match = "*" Replace = "-" 対象 = "abc" 結果 = "-" ※もしこれが、最短一致なら、結果は -a-b-c (3回マッチ)になる & && | で区切った場合もちゃんと最後に置いたと認識される Match = "abc* & abcde" Replace = "-" 対象 = "abcdef" 結果 = "-"
※検索語の最後にコマンド($SET() や $URL() など)を置いた場合、最後に置いたと認識されないのか、最短一致のままで動作する
Match = "*$URL(?)" Replace = "-" 対象 = "abc" 結果 = "-a-b-c" (3回マッチ)
※※しかし、 \0$URL(?) だと最長一致になる。\0-9# でも同じ。\0-9# は検索語の最後にコマンドがあっても最長一致になる。参考:掲示板/1
これは、* の方がおかしな動作をしている(バグ?)といえそうである。
また、どうやら微妙なバグ(仕様?)もある様子 Match = "?*$URL(*)" Replace = "-" 対象 = "abc" 結果 = "--c" (2回マッチ) ※「?*」の * を \0-9# に置換すると、結果は「-」の1回マッチになる Match = "??++$URL(*)" Replace = "-" 対象 = "abc" 結果 = "---" (3回マッチ) *\0-9# の後に対象を消費しない物(ゼロ幅の否定・肯定文)がある場合は、* は最長一致として動作する様子。 Match = "?*((^(^?))|(^?)|comment)" Replace = "-" 対象 = "abc" 結果 = "-" (1回マッチ) Match = "??++((^(^?))|(^?)|comment)" Replace = "-" 対象 = "abc" 結果 = "---" (3回マッチ)
最左最短で、マッチの開始位置の変更はしてくれないので、
Match = "もな*ぎこ" Replace = "Zぞぬ" は 「もなふっさ もなぎこ」 の2行全てを「Zぞぬ」に置き換えてしまう。
グループ化する。 繰り返し表現や、 ^ | & && 等と併用する。 また、変数への取り込みにも使用される。
文字クラス(文字のセット)化する。
例 [/.:] / . : のどれか1文字にマッチ ["&*?|] " & * ? | のどれか1文字にマッチ
このようなメタキャラクタはエスケープの必要が無い。
[abd] A , B , D , a , b , d のどれか1文字にマッチ
テストされる文字は一旦小文字に直されるため、大文字小文字の区別無くマッチ
[2-6] 2 , 3 , 4 , 5 , 6 のどれか1文字にマッチ
「-」でASCII順の範囲指定。「-」そのものにマッチさせる時は[%2d]と書くか、[abc-]のように最後に置くか[0\-9]のようにエスケープする。
[c-G] C , D , E , F , G , c , d , e , f , g のどれか1文字にマッチ
c(0x63)~G(0x47) という一見ありえない範囲指定だが、 []の内部も先に小文字に直されるため c(0x63)~g(0x67) に(大文字小文字の区別無く)マッチする。[%63-%47],[c-%47],[%63-G] なども全て同じ表現になる。
[A-z] AからZ、aからz のどれか一文字にマッチ
前記の通り A(0x41)~z(0x7A) ではなく、 a(0x61)~z(0x7A) に(大文字小文字の区別無く)マッチする。よって \(0x5C) , `(0x60) などにはマッチしない。
[^0-9a-z] 0から9、AからZ、aからz 以外の一文字にマッチ
先頭に「^」で否定を表す。「^」そのものにマッチさせる時は[%5e]と書くか先頭以外に置けばよい。
[\]\\] ] , \ のどちらか一文字にマッチ
この2つはエスケープが必須
[\t\n\r] HT(0x09) , LF(0x0A) , CR(0x0D) のどれか一文字にマッチ
[あ] [%82%a0]と同義。
"あ"にはマッチしない。[]はあくまで1バイトの文字列にマッチする。
[アイウエオ] Shift_JISの ア , イ , ウ , エ , オ のどれか一文字にマッチする
Shift_JIS の1バイト片仮名(いわゆる半角カナ)はマッチする。
[0-9#%ff] 0から9、#、0xff のどれか一文字にマッチ [#%ff0-9] これは SyntaxErrorになる。 理由は下記。
「[#」の様に、文字クラスの最初が # の場合、# の次は半角数字でなければエラーになる。 [#n:m]として処理してしまう為らしい。
例 [#a] SyntaxError [\#a] OK(a,# の文字クラス) [a#] OK(a,# の文字クラス) [#1a] OK(※文字クラスではない 00001 等の数字の1に一致 a には一致しない [#n:m]参照)
指定した値の1バイトにマッチする。HH は16進数で 00~ff。
アルファベットの大文字と小文字を区別したい場合や、入力できない文字、マルチバイト文字にマッチさせたい場合に使用する。
4.5June+3 未満では、%41-%5a%61-%7a(A-Za-z)を指定した場合に大文字小文字が区別されずにマッチする。
パターン | 4.5June+3 未満 | 4.5June+3 以上 |
[a] | A、a にマッチ | ← |
[%41] | A、a にマッチ | A にマッチ |
[%41%61] | A、a にマッチ | ← |
[%ff] | 0xff にマッチ | ← |
[%82][%a0] | Shift_JISの「あ」にマッチ | ← |
文字を [%HH] 形式に変換して表記することを「エンコードする」と言う。
(例) 全角空白をエンコードすると
Shift_JIS | [%81][%40] |
ISO-2022-JP | [%1B][%24][%62][%21][%21][%1B][%28][%42] |
EUC-JP | [%A1][%A1] |
UTF-8 | [%E3][%80][%80] |
Proxomitron の内部構造は本来マルチバイト文字に対応していないため、マルチバイト文字をそのまま記述すると、
といった問題がでる。そこで、マルチバイト文字は [%HH] 形式にエンコードして記述するのがよい。
Shift_JIS には、2バイト目に 0x41~0x7A(ASCII における A-Za-z)を含む文字がある。
例えば Shift_JIS で「萌」(0x96 0x47)にマッチさせたい場合、そのまま「萌」と記述すると Proxomitron は「0x96 という1バイト値+英字の G」というパターンとして解釈してしまう。 アルファベットは常に大文字小文字が同一視されるので、これは「萌」だけでなく 「鉾」(0x96 0x67=g)にもマッチしてしまう。
そこで [%96][%47] と記述することで、[%47] は 0x47 だけにしかマッチせず、「萌」のみ マッチして「鉾」にはマッチしなくなる(ただし 4.5June+3 未満では同一視されるためこの回避策は使えない)。
なお、Shift_JIS では他に以下のような誤爆もあるが、これらは [%HH] 記法でも回避できない。
参考リンク
^ (0x5E) キャレット。大本か、グループ、文字クラスの始まりに置き使用すると、否定を意味する。 大本、グループの始まりに置いた場合、対象を消費しない、ゼロ幅の否定先読みになる。 2回使うと否定の否定で、対象を消費しない、ゼロ幅の肯定先読みになる。
例 Match = "?(^[^abc])" Replace = "-" 対象 = "<body>" 結果 = "-body-" Match = "(^[^abc])" Replace = "-" 対象 = "<body>" 結果 = "<-body>" ※4.3では[No Match](4.3は検索対象を消費しない場合マッチしない)
又は。大本か、グループ内で使用する。
勿論どれも最初にマッチしなければ、次を検索しない。
例1 対象 = <a href="x">a</a> <a *>&\1 \1 = <a href="x">a</a> <a *>&&\1 \1 = <a href="x"> 例2 対象 = tttestqqq test&\0 \0 = testqqq test&\0 ByteLimit = 5 \0 = testq test&&\0 \0 = test
繰り返したい物の直後に付ける。 グループ化した物の後ろに付けると、そのグループが対象になる。
0回以上の繰り返し 最長一致の様だが違う、後ろを全く見ない検索 Perl5の正規表現で言う所の「(?>値*)」
例 Match = "(?+b)\0" Replace = "[\0]" 対象 = "abbbbc" 結果 = [No Match] 「?+」が全て消費し切ってしまう為こうなる 「?+b」はPerl5で言うと「(?>.*)b」
後ろを全く見ない為、++より高速だが、注意して使ったほうが良い
(検索表現)+ 、(検索表現)++ を使った場合、(検索表現) が最短一致でマッチしない場合はfalseを返す。
⇒ ([^/]+/)+ は (*/)+ と同義。
0回以上の繰り返し 最左最短一致、非欲張り、控えめ (non-greedy) Perl5の正規表現で言う所の「*?」
例 Match = "(?++b)\0" Replace = "[\0]" 対象 = "abbbbc" 結果 4.5j, 4.5m, 4.3 [ab][b][b][b]c 4.4 [ab][b]b[b]c ※4.4はバグが原因でtestではそう表示されるが、実際のマッチでは問題ない様子(4.3、4.5と同じ)
「?++」と「*」は全く同じではない
Match = "?++" Replace = "-" 対象 = "abc" 結果 4.5j, 4.5m, 4.4 -a-b-c マッチ回数3回 4.3 [No Match] ※4.3は対象を消費しない場合、マッチしない
マッチの開始位置の変更はしてくれない
[Patterns] Name = "TEST: text = abcccde 1/4 (bc+)\0" Match = "(bc+)\0" Replace = "[\0]" Name = "TEST: text = abcccde 2/4 (bc++)\0" Match = "(bc++)\0" Replace = "[\0]" Name = "TEST: text = abcccde 3/4 (c+d)\0" Match = "(c+d)\0" Replace = "[\0]" Name = "TEST: text = abcccde 4/4 (c++d)\0" Match = "(c++d)\0" Replace = "[\0]" 1/4 a[bccc]de 2/4 a[b]cccde 3/4 ab[cccd]e 4/4 ab[cccd]e 4/4に注目 「最短一致」という言い方をすると、「d」になりそうな気がしてしまうが、マッチの開始位置の変更はしてくれないので、このようになる。 「最短一致」より、「最左最短一致、非欲張り、控えめ」(non-greedy) といった方が誤解がない予感。
勿論Perlでも同じ。参考:最短一致マッチで誤解しやすいこと - a geek
n回以上、m回以下マッチ。 {n}はn回ちょうど、{n,*}はn回以上で上限無し。 最長一致の様だが違う、後ろを全く見ない検索 Perl5の正規表現で言う所の「(?>値{n,m}) / (?>値{n})」
例 Match = "?+{2,5}b" 対象 = "aaab" 結果 = [No Match] 「?+{2,5}」が全て消費し切ってしまう為こうなる 「?+{2,5}b」はPerl5で言うと「(?>.{2,5})b」
後ろを全く見ないので、注意して使ったほうが良い。
回数を数える為、繰り返しを表したいだけの場合は、+ を使用した方が速い。
n回以上、m回以下マッチ。 {n}はn回ちょうど、{n,*}はn回以上で上限無し。 最短一致 Perl5の正規表現で言う所の「値{n,m}? / 値{n}?」
例 Match = "?++{2,5}b" Replace = "-" 対象 = "aaab" 結果 = "-" 「?++{2,5}b」はPerl5で言うと「.{2,5}?b」 Match = "?++{2,5}" Replace = "-" 対象 = "aabbc" 結果 = "--c" 最短一致なのでこうなる Perl5でも同じ
数として処理する。 nからmまでの大きさの数にマッチ。nのみの場合、その数にマッチ。 「:」ではなく「-」でも可(古いバージョンはマイナスのみだったような気もする)。 n, m は半角数字、マイナスでも良い。*(アスタリスク)の場合、無限大になる。 絶対値ではなく、値が、[#小:大]である必要がある。 [#n:m]の直後に数字は絶対に来ない。 .(ドット、小数点)、,(カンマ、桁の区切り)は認識しない。また、.(ドット)、,(カンマ)等を無視するようにする事は出来ない。
例1 [#249:375] の場合 000000325 全てにマッチ 0000003250 後ろの250にマッチ 0000032500 マッチしない 000000325.0 .0を除きマッチ
例2 [#249:375] O [#375:249] X [#-375:249] O [#249:-375] X [#-375:-249] O [#-249:-375] X
また、HTMLタグの値に使用される事を想定されているらしく、右か左に「"」「'」があると、それにもマッチする。
例) 「<img width=[#500:600]>」に <img width="510"> がマッチする。
\"[#100:200]\"のようにしても、""100""、"'100'"、""100'"等にマッチする。
これに繰り返し表現を付けると…
「[#249:375]+」 区切りが半角スペース、タブ、改行・・・であれば連続でマッチ そうでない場合+無しと同じ
バグ [Patterns] Name = "[#n:m] test" Limit = 256 Match = "[0-9]+{2}&&[#20:79]&&\0" Replace = "[$UESC(%\0)]" テスト用文字列 = "4040" 結果 = "40[@]" ※ByteLimit = 2 を指定しても同じ結果になる [#n:m] は && や Bounds でマッチする範囲を固定しても、その枠からはみ出て処理するためなのかマッチしない様子 ※Match の &&[#20:79] を消すと、結果は [@][@] になる 4.3, 4.4, 4.5May, 4.5June, 4.5June338, 4.5June+6 で確認
ローカル=そのフィルタ(cfgファイル全体ではない)のみで使用可能
アスタリスクと同じで全てにマッチするが、マッチした物を自身に格納する。
格納した値は Replace 等で使用可能。
グループ化した物の後ろに付けると、そのグループにマッチした物をその変数に取り込む。
[Patterns] Name = "test1" Match = "(?)\0$ALERT(\0)" "(?)\0$ALERT(\0)" "(?)\0$ALERT(\0)" Replace = "[\0]" Name = "test2" Match = "((?)\0$ALERT(\0))+{3}" Replace = "[\0]" 検索対象 = "abc" 結果: 4.5May, 4.5June, 4.5June338, 4.5June+6 test1 は [a] test2 は [c] アラートは test1 も test2 も「a」「b」「c」の3回 4.3, 4.4 test1 は [a]、アラートは「」(空)が3回 test2 は [c]、アラートは「」(空)「a」「b」の3回
Match で取り込んだ変数を同じ Match で使いたいなどという場合、$TST()を使用することになる。
URL欄で \0-9# へ代入しても、Bounds、Match、Replaceで参照すると、\0-9# は空になっている。
但し、Match欄が <start> か <end> の場合は、\0-9# は空にならない。
「\0$ALERT(\0)」は必ず空になってしまう。これは、\0 が 1バイトマッチする度に後ろを見ている = \0 が最短の0バイト(空)にマッチするかを調べた次の瞬間に $ALERT() が実行され、検索が終了してしまう為である。
「\0 & $ALERT(\0)」か「\0 && $ALERT(\0)」か「(?+)\0$ALERT(\0)」の様にすれば問題ない。
※「$SET(0=hoge)$ALERT(\0)」や「\0e$ALERT(\0)」の場合 & && は不要
\0-9と同じだが、連続して格納可能。Matchで\#を使い格納した値は、Replaceで\#を使うことにより一つずつ取り出して出力することが出来る。先に格納したものから取り出されるので、FIFO(First In First Out)、つまりキューである。Replaceに書かれた\#で取り出された値は、キューから取り除かれる。
\#には100回まで追加する事が出来る。
100回以降は追加されているようでされていない。(そこでマッチが止まったりはしない)
100回以降の\#への代入は、最後(100個目)の\#に代入される。
対象 = AAA...ABCDEFGHIJKLMN ※「AAA...A」はAが98個並んだ物 Match = ((?)\#)+ \@ = AAA...ABN
$SET()で\#に代入された\0-9は、代入された時の\0-9の値ではなく、展開(出力)時の\0-9の値になる。
Name = "$SET() TEST 1/3" Limit = 256 Match = "( (?)\0 $SET(#=\0) $ALERT(\@) )+{1,3}$STOP()" Replace = "[\@]" Name = "$SET() TEST 2/3" Limit = 256 Match = "( (?)\0 & $SET(#=\0) $ALERT(\@) )+{1,3}$STOP()" Replace = "[\@]" Name = "$SET() TEST 3/3" Limit = 256 Match = "( (?)\0 && $SET(#=\0) ? $ALERT(\@) )+{1,3}$STOP()" Replace = "[\@]" 対象は全て "abc" 結果は全て "[ccc]" ($ALERT(\@)を消しても同じになる) アラートも全て、「a」、「bb」、「ccc」の3回 (4.4以下だとTEST 1/3のみ「」「aa」「bbb」となる)
この事から、\# に \0-9 を代入した場合、その時の\0-9の値が\#に入るわけではなく、展開時にその\0-9に置き換える為の特別なフラグが\#に入ると思われる。
そして、\#/\@展開時にそのフラグが含まれていた場合、展開したその時の\0-9に置き換えられると思われる。
また、「$SET()で\0-9に代入された\#@は、代入された時の\#@の値ではなく、展開(出力)時の\#@の値になる」でもある。
Bounds か & か && と \# を組み合わせて使用すると、場合によってはバグが発生する(testでも実際のマッチでも発生する)
例 [Patterns] Name = "TEST: Bounds + \# <?-?>" Bounds = "<[^>]+>" Limit = 256 Match = "<\#-\#>" Replace = "[\#] [\#] [\#] [\#] [\#] [\@]" 検索対象 = <a/b> <A-B> 結果 = <a/b> [] [A] [B] [] [] [] ※最初の\#にゴミが入っている 検索対象2 = <A-B> <a/b> <c/d> <e/f> <C-D> 結果2 = [A] [B] [] [] [] [] <a/b> <c/d> <e/f> [A] [B] [] [C] [D] [] ※<a/b>でAが残り、<c/d>でBが残り、<e/f>で空が残る ※4.4, 4.3では、[A] [C] [D] [] [] []になる &、&&でも同じ結果になる [Patterns] Name = "TEST: & + \# <?-?>" Limit = 5 Match = "<[^>]+>&<\#-\#>" Replace = "[\#] [\#] [\#] [\#] [\#] [\@]" Name = "TEST: && + \# <?-?>" Limit = 256 Match = "<[^>]+>&&<\#-\#>" Replace = "[\#] [\#] [\#] [\#] [\#] [\@]"
どうも、Boundsでマッチして、Matchでも途中までマッチし、その間で\#がそのまま使用された場合、 次に検索した時には空になっているはずの最初の\#が残ってしまう様子。
幾つかの対策があります ※&/&&の場合、Boundsを&/&&の左側、Matchを&/&&の右側に置き換えてください
\#に格納された物を全て結合して出力する。それぞれの値は直接結合される。一度出力するとキューは空になり、以後\#や\@を使っても何も出力されない。
全フィルタ間で変数のやり取りが可能
4.5以降のみ使用可能
コマンド一覧 の $SET()、$GET()、$TST()参照
タブ 0x09
リターン=キャリッジリターン(CR) 行頭復帰 0x0d Macの改行コード
ニューライン=ラインフィード(LF) 改行 0x0a UNIXの改行コード (Windowsの改行コードはCRLF)
※testで改行を出力するには\r\nとする必要がある
https: + out では \u, \h, \p, \q, \a が正しい値を返さないことがあるので注意
host
現在のURLのホスト部分 ※ポートは常に含まないので、$URL() で取得した方が良い。
使われる場所によって表される値が変化するので注意。
置換テキストで使われたりIPアドレスタイプのドメインならホスト部分全てを表すが、
検索表現で使われた場合は
gTLD(www.google.com , e-words.jp等)ならセカンドレベルまで、
ccTLD(yahoo.co.jp , kantei.go.jp等)ならサードレベルまで、
を含んだ特別な検索表現になる。
www.google.com → (([^%00-%20"'/:>\\])++.|)google.com(^[^%00-%20"'/:>\\]) yahoo.co.jp → (([^%00-%20"'/:>\\])++.|)yahoo.co.jp(^[^%00-%20"'/:>\\])
例 url:http://www.google.com/ Match = "\h" 〇 http://[google.com]/ http://[image.google.com]:81/ "[www.yahoo.com+www.google.com]" [例えばwww.google.com]/で検索 × http://anothergoogle.com/ http://google.comic.com/ http://google.com@ 例えばgoogle.com/で検索 例えばwww.google.comで検索
この挙動が問題となるのは、「Kill off-site Images」のようなフィルタであろう。 例えば、www.2ch.netにおいて「count.2ch.net」「image.2ch.net」をも別ホスト扱いしたい場合であるが、 これは$TST()を使うと上手くいく。
Bounds = "<img\s*>" Match = "*\ssrc=$AV(https+://(^\h)*)*" ↓ Bounds = "<img\s*>$URL(https+//\1[:/])" Match = "*\ssrc=$AV(https+://(^$TST(\1))*)*"
※ Webフィルタの検索欄でマッチングに \h を使うと上記とは異なるマッチングをするので注意。
geocities.co.jp のページにいるときに
Match = "\h"
というマッチングをさせると "co.jp" という文字列にまでマッチしてしまう。 つまり ccTLD には対応していない。 "www.yahoo.co.jp" などの文字列にもマッチしてしまうので、 Webフィルタのマッチングには使わないほうが良いだろう。
< 検索欄での2バイト文字への誤爆を避ける方法 >
(\h&&[a-z0-9_.-]+)
のように \h の中をテストをする。
ただし \h の直前に "2バイト目が [a-z0-9_.-] な2バイト文字" があると誤爆する。
path
現在のURLのパス部分
? + query string + (# + anchor text|)
現在のURLの?含むそれ以降全て
通常、http://host/a/b/c/index.php?dd#ee の場合、クエリーストリングは「dd」のみだが、\q の場合「?dd#ee」となる。
※IE等のブラウザは通常アンカーテキストをリクエストとして送信しない。
# + anchor text
現在のURLの#含むそれ以降全て
※クエリーストリングが有った場合、それ以降を全て\qに持って行かれる為、リクエストにアンカーテキストが含まれていても、\aは空になる。
ちなみに、Proxomitronでは、アンカーテキスト=URLの#以降のこと だが、
他のサイトでは、アンカーテキスト=「<a href="URL">愛生会</a>」の「愛生会」の部分 と言われていることが多い。
どっちが正しいのかは不明
(JavaScriptではURLの#以降はhashと呼ばれ、RFCではfragmentと呼ばれる様子)
URL
現在のURL(但しリクエストされた物そのままではない) [HTTP headers]、[Patterns]、検索、置換全てで使用可能
directory
Proxomitron 本体があるディレクトリ(フォルダ)のフルパス。ローカルのJSファイル等を直接参照したい場合等に使用する。
「file:///D|/.../%21PROXY/PROXOMITRON/」の様な形で、URLエンコードされた物を返す。
A-Zのドライブ文字の後の文字は、4.5では「|」だが、4.3, 4.4は「:」になる。この部分は、File -> Open Local File URL(ファイル → ローカルファイル URL を開く) でも違う。
(4.5June+8 では、IE7対策のため常に「:」になるように修正された)
4.3, 4.4, 4.5June+8 では常に「:」を返し、
4.5May, 4.5June, 4.5June338(4.5June+3改), 4.5June+6, 4.5June+7 では常に「|」を返す。
ネットワークドライブ上にある Proxomitron を実行している場合、「file://///ComputerName/.../Proxomitron/」のような形になる。
Proxydomo v1.10以降、検索表現では\dは[0-9]+として機能する (v1.7~1.9では[0-9])
置換テキストではProxomitronと同じ(v1.56より前は未実装)
prefix
Config -> Access -> Prefix all URL commands with: (設定 → アクセス → 全てのURLコマンドの前に必要な接頭語)に設定した物を返す。
Config -> Access -> Disable URL based Proxomitron commands (設定 → アクセス → URL ベースの Proxomitron コマンドを無効にする) にチェックを入れていない場合、
勝手にURLコマンドのBypass, Bwebなどを使われないように、必ずユニークな文字列を設定しておいた方が良い。
特に、4.5June+6 からはIE7対策のため、URL コマンドを . だけでも使えるようになっている(例: http://dbug.whois.jp/)ので、Prefix の設定は必須といえる。