マクロ内のserchdownと秀丸内の検索で正規No.03122
kobaryu さん 02/05/05 01:43
 
PHPで変数を選択するマクロを作っているのですがどうもうまくいきません。
目的と症状は、たとえば・・・
if( $data_strings[$i]=="aaaa"; ){
という行のースがあったとして str の s にキャレットがあるとします。
そこでマクロを実行した際に $data_strings[$i] を選択させるのが目的です。

まず searchup "$"; を実行し$に移動させてから
beginsel; を実行。さらに閉じ括弧までを選択させたいので
searchdown "[^a-zA-Z0-9_\[\]\$]",regular;
としています。
マクロファイルから実行ということになりますが
これを実行すると false が帰ってきます。
念のため、その場所にカーソルを置きCTRL+Fを実行し
検索ダイアログで正規表現検索で上と全く同じ表現で実行すると
ちゃんとうまくいきます。

そこで質問なのですが、秀丸のマクロのsearchdownは
検索ダイアログの正規表現置換と違う動作をするのでしょうか?
私の方法が間違っている時やもっとよい方法がある場合は
教えてください。

[ ]
RE:03122 マクロ内のserchdownと秀丸内のNo.03123
kobaryu さん 02/05/05 01:54
 
追記

setsearch "[^a-zA-Z0-9_\[\]^\$]",16;
finddown;

でも false が帰ってきました。
マクロ内で正規表現使えないと痛いなぁ(TT

[ ]
RE:03122 マクロ内のserchdownと秀丸内のNo.03124
kobaryu さん 02/05/05 02:05
 
とりあえず今は 変数の後に来そうなものを検索することで対処しています。
searchdown "[ ;\(\)\{\}\*\+-\/\r\n\t]",regular;

これなら上手くいくようなので、原因は否定 ^ を使ったときなんでしょうか?

[ ]
RE:03122 マクロ内のserchdownと秀丸内のNo.03125
アルビレオ さん 02/05/05 05:19
 
>まず searchup "$"; を実行し$に移動させてから
>beginsel; を実行。さらに閉じ括弧までを選択させたいので
>searchdown "[^a-zA-Z0-9_\[\]\$]",regular;
>としています。

マクロが文字列を解析する時点でも'\'によるエスケープは有効なので
マクロファイル内では'\\'と書く必要があります。

#ここからは通常の正規表現とは違う秀丸(の使用するJRE32.DLL)特有のルールが含
まれています。

[]内では正規表現で使用される文字は特別な意味を持たなくなり、
^-]\の4つだけが特殊な扱いになります。
このうち2つのキャラクタも[]内の置く位置によっては普通のキャラクタとして
扱われ、[]内では特別扱いはされません。
']'については秀丸(JRE32.DLL)の特殊ルールで'\]'と書く必要があります。

結局、希望の検索を実現するには

searchdown "[^a-zA-Z0-9_[\\]$]",regular;

と書けばうまくいきます。
少なくともこちらのテストでは成功しました。

正規表現の詳しい記述方法については「秀丸エディタQ&A」を参照してください。
http://homepage2.nifty.com/jr-kun/hidemaru_qa/4_regulr.html

[ ]