\#* と同じように働き、消費したテキストを置換スタックに格納していく (新しい値を格納しても、前の値を上書きしない)\@\# は「置換スタック」と呼ばれます。
URLのように連続した文字列から必要な部分だけ選んで置換スタックに格納していき、\@ で出力する手段がよく使われます。
ローカル変数と同じく、置換スタックもフィルタ毎に独立しています。
グループ化したパターンを置換スタックに取り込むことも出来ます。
\# に格納された値を \# で取り出すと、前の要素から抽出されていきます。
[Patterns] Name = "\# test1" Active = TRUE Limit = 256 Match = "(Prox)\#(omit)\#(ron)\#" Replace = "\\# = \# / \\# = \# / \\# = \#"
\# = Prox / \# = omit / \# = ron が出力されます。
[Patterns] Name = "\@ test1" Active = TRUE Limit = 256 Match = "(Prox)\#(omit)\#(ron)\#" Replace = "\\@ = \@ / \\@ = \@"
\@ = Proxomitron / \@ = が出力されます。
一度、\@ で出力すると、置換スタックは空になります。
[Patterns]
Name = "\@ test2"
Active = TRUE
Limit = 256
Match = "(Prox)\#(omit)\#(ron)\#"
"$SET(0=\@)"
Replace = "\\0 = \0 / \\@ = \@"
\0 = Proxomitron / \@ = Proxomitron が出力されます。
$SET内で \@ を使用しても、置換スタックは空になりません。
[Patterns]
Name = "\@ test3"
Active = TRUE
Limit = 256
Match = "(Prox)\#(omit)\#(ron)\#"
"$SET(0=\@)"
"$SET(0=)"
Replace = "\\0 = \0 / \\@ = \@"
\0 = / \@ = Proxomitron が出力されます。