秀丸メールでの正規表現検索No.03634
旧姓山下 さん 13/03/31 11:16
 
こんにちは

この会議室で 03623 からのスレッドにて質問させて頂いた内容の続きのようでもあ
りますが,一応別に聞かせて頂きます.

秀丸メールの署名として,次のようなパターンを設置しております.氏名やアドレス
は架空のものです.

<<<<<<<<<<<<<<<<<<<<<<<<<
苗字 名前 (Namae MYOJI)
"myoji@usodomain.uso.jpjp"
>>>>>>>>>>>>>>>>>>>>>>>>>

これを「署名(う)」としておきます(本来はアドレスは""で囲んでいません)

この署名に限らず,私は署名を「署名切り替え」ボタン→「カーソル位置に挿入」と
いうルートで入れております.この方法を採る場合,メールにこの署名が書かれてい
るか否かは文字列の検索にてチェックするしかない,と教えて頂きました.

さて,署名を検索するため,次のようなマクロを作りました(秀まるお様に教えて頂
いたものです.03623 からのスレッドをご覧下さい).目的は,ログインしたアカウ
ント用の署名とは違う署名が書かれていたら警告することです.

loaddll "tkinfo.dll";
$account = dllfuncstr("CurrentAccount");
if( $account == "アカウントA" ) {
 gofiletop;
 searchdown2 "MYOJI\)\nmyoji@usodomain\.uso\.jpjp$", casesense, regular;
 if( result == yes ) {
     message "このアカウントには不適切な署名です";
  endmacro;
 }
}

このマクロを
 マクロ→マクロ登録→自動起動→あとで送信/今すぐ送信時
に登録し,アカウントAで作成した署名(う)入りのメールにて試したところ,

正規表現パターンでのカッコの対応が合っていません。

というエラーメッセージが出てきました.そして,メッセージの「OK」を押すとメー
ルは送信されてしまいます.

署名をアカウントAでの使用を想定したもの,例えば
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ハンドルネーム (handlename)
"handlenamename@marumaru.ne.jpjp"
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
に差し替えて試しても,エラーメッセージの出現とメールの送信は同様です.


要するに,正規表現

MYOJI\)\nmyoji@usodomain\.uso\.jpjp$

がおかしいということなのでしょう.

しかし,秀丸エディタで署名(う)を書いたファイルを作成し,正規表現検索にて

MYOJI\)\nmyoji@usodomain\.uso\.jpjp$

を検索すると,エラーも出ずに検索できます.


何がおかしいのか,ご教授頂けませんでしょうか.

[ ]
RE:03634 秀丸メールでの正規表現検索No.03635
h-tom さん 13/03/31 11:54
 

h-tom です。

>要するに,正規表現
>
>MYOJI\)\nmyoji@usodomain\.uso\.jpjp$
>
>がおかしいということなのでしょう.
正規表現として、"MYOJI\)\nmyoji@usodomain\.uso\.jpjp$"という文字列が
渡されていないということです。

message "MYOJI\)\nmyoji@usodomain\.uso\.jpjp$";

というマクロを実行させ、表示される文字列が、正規表現として認識されて
いる文字列で、"MYOJI\)\nmyoji@usodomain\.uso\.jpjp$"に、なっていない
はずです。

マクロ内で正規表現を正しく認識させるには、2重にエスケープする必要が
あります。

[ ]
RE:03634 秀丸メールでの正規表現検索No.03636
PineCone さん 13/03/31 11:56
 
旧姓山下さん、こんにちは。

1ユーザのPineConeと申します。お世話になります。

>
>要するに,正規表現
>
>MYOJI\)\nmyoji@usodomain\.uso\.jpjp$
>
>がおかしいということなのでしょう.
> :(※途中、省略)
>何がおかしいのか,ご教授頂けませんでしょうか.

「\」は、特殊な文字(エスケープキャラクタ)なので、
マクロ中では「\\」と記述する必要があります。
一度、ご確認ください。


[出典]
・「秀丸エディタマクロ(入門用)ヘルプ」(be_hidemac.chm)の
  「エスケープシーケンスについて」を参考にしてください。

  ※http://homepage3.nifty.com/kons/hidemaru/helpsite/be_hidemac/html/05_Esc.html


以上です。
よろしくお願いいたします。

[ ]
RE:03636 秀丸メールでの正規表現検索No.03637
旧姓山下 さん 13/03/31 18:13
 
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$
を探すということになるのでしょう.

秀丸メールのマクロとして,どちらの方が安全ということはあるのでしょうか.

どちらでもいいとなれば,マクロ中の「"」で囲む中に用いる正規表現においては
「\」を「\\」と書く,と機械的に覚えてよさそうに思っております.

何か参考になりそうなことがありましたら,ご教示願えませんでしょうか.よろしく
お願い致します.

[ ]
RE:03637 秀丸メールでの正規表現検索No.03639
PineCone さん 13/04/01 10:01
 
旧姓山下様、h-tom様、こんにちは。

1ユーザのPineConeです。お世話になっております。
投稿が重なってしまい申し訳ございませんでした。> h-tom様


>何か参考になりそうなことがありましたら,ご教示願えませんでしょうか.よろし
>くお願い致します.
>

--- ここから ---
 正規表現の書き方は、「\」を書く場合はマクロの文字列の書き方と
二重になるので注意が必要です。

 例えば、検索ダイアログの正規表現でのタブの検索は「\t」と書き
ますが、マクロのregular付きでは「"\\t"」と書きます。
--- ここまで ---

[出典]
・「秀丸エディタ マクロ言語ヘルプ目次」(hidemac_html.chm)の
  「searchdialog,searchup,searchdown文」を参考にしてください。

  ※http://homepage3.nifty.com/kons/hidemaru/helpsite/hidemac/html/080_CmdStatement_Search_searchdialog_searchup_searchdown.html


>どちらでもいいとなれば,マクロ中の「"」で囲む中に用いる正規表現においては
>「\」を「\\」と書く,と機械的に覚えてよさそうに思っております.
>
前述の通り、旧姓山下様の考え方で合っていると思います。


以上です。
よろしくお願いいたします。

[ ]
RE:03639 秀丸メールでの正規表現検索No.03641
旧姓山下 さん 13/04/01 17:24
 
PineCone 様

ご回答ありがとうございました.

>>どちらでもいいとなれば,マクロ中の「"」で囲む中に用いる正規表現においては
>「\」を「\\」と書く,と機械的に覚えてよさそうに思っております.
>>
>前述の通り、旧姓山下様の考え方で合っていると思います。

ほっとしました.当面はあまり深く考えず,機械的に覚えておこうと思います.

ご紹介頂きましたマクロヘルプのページもブックマークに登録しました.

ありがとうございました.

[ ]