|
h-tom 様,PineCone 様
ご回答ありがとうございました.先に PineCone 様からのご回答を使いながら進めさせて頂きます.
>「\」は、特殊な文字(エスケープキャラクタ)なので、
>マクロ中では「\\」と記述する必要があります。
>一度、ご確認ください。
教えて頂いたページ,および公式マニュアル 171 ページなどを見まして,マクロ中の文字列として「"」「'」「\」を用いる場合,「\"」「\'」「\\」と書かねばならない,ということが分かりました.
ということは,先に私が質問した中のマクロについて,
searchdown2 "MYOJI\\)\\nmyoji@usodomain\\.uso\\.jpjp$", casesense, regular;
と直せばいいわけですね.
さて,このようにしたら確かに期待通りの動き(エラーが出ても送信されてしまうのは問題ですが,検索には引っかかりました)をしたのですが,まだ一部,理屈として混乱しているところがあります.もしお分かりになりましたら,お教え下さい.
混乱しているのは「改行」と「タブ」です.ニュアンスを正確に伝えることが難しいのですが,先例において「\)」は,正規表現中に「)」を用いる場合は前に「\」をつけてエスケープしなければならない.マクロ中では「\」を「\\」としなければならないので,結果として「\\)」になる.と理解したのです.
しかし,正規表現において改行は最初から「\n」で1文字扱いです.「n」を表すために「\」でエスケープするというわけではありません.一方,教えて頂いたページにも『マクロで改行文字を記述するには「\n」を使います』と書いてあります.すると,この「\」は「\\」にしなくてもいいのではないかとも思い,
searchdown2 "MYOJI\\)\nmyoji@usodomain\\.uso\\.jpjp$", casesense, regular;
も試してみたのです.そうしたら,これもきちんと検索したのです.
h-tom 様に教えて頂いた方法で試してみたところ,
message "MYOJI\\)\\nmyoji@usodomain\\.uso\\.jpjp$";
のアウトプットは1行で,
MYOJI\)\nmyoji@usodomain\.uso\.jpjp$
一方,
message "MYOJI\\)\nmyoji@usodomain\\.uso\\.jpjp$";
のアウトプットは2行で,
MYOJI\)
myoji@usodomain\.uso\.jpjp$
つまり,前者は正規表現
MYOJI\)\nmyoji@usodomain\.uso\.jpjp$
を探し,後者は正規表現込みの2行
MYOJI\)
myoji@usodomain\.uso\.jpjp$
を探すということになるのでしょう.
秀丸メールのマクロとして,どちらの方が安全ということはあるのでしょうか.
どちらでもいいとなれば,マクロ中の「"」で囲む中に用いる正規表現においては「\」を「\\」と書く,と機械的に覚えてよさそうに思っております.
何か参考になりそうなことがありましたら,ご教示願えませんでしょうか.よろしくお願い致します.
|
|