HMJRE.DLLでの正規表現置換No.03937
かよ さん 03/11/04 19:50
 
 いつも便利に使わせてもらっています。
 menuarray文用の配列変数 $mn[n] を追加・削除したり、順序の入れ替えをしたり
した後、添字をふり直すのにマクロを利用していました。
 たとえば、編集後に
 $mn[3]="ああああ";
 $mn[2]="いいいい";
 $mn[0]="うううう";
 $mn[4]="ええええ";
 $mn[1]="おおおお";
 menuarray $mn, 5;
のようになったものに対してマクロを実行して、以下のように添字を付け直していま
した。(この例のように5つぐらいならマクロを使う必要もないのですが……。)
 $mn[0]="ああああ";
 $mn[1]="いいいい";
 $mn[2]="うううう";
 $mn[3]="ええええ";
 $mn[4]="おおおお";
 menuarray $mn, 5;
 DLLがJRE32.DLLのときは問題なく機能していたのですが、HMJRE.DLLに変更した後、
まったく機能しなくなりました。試しにJRE32.DLLに戻すと問題なく機能します。
 マクロは以下のようなものです。正規表現の記述に問題があるのかとも思いますが、
よくわかりません。ご教示いただければ幸いです。
//----------------------------------------
gofiletop;
#i = 0;
while ( #i < 1000 ) {
    replacedown "$mn\\[[0-9]+\\]","$mn[" + str(#i) + "]",regular;
    if ( !result ) break;
    #i = #i + 1;
}
message str(#i) + "個の添え字を付け直しました。";
endmacro;
//----------------------------------------

[ ]
RE:03937 HMJRE.DLLでの正規表現置換No.03938
たけのこ さん 03/11/04 19:57
 
一般ユーザのたけのこです。

>     replacedown "$mn\\[[0-9]+\\]","$mn[" + str(#i) + "]",regular;
                   ↑
'$'自体を正規表現で使う場合にはエスケープさせなければなりませんから、

     replacedown "\\$mn\\[[0-9]+\\]","$mn[" + str(#i) + "]",regular;

で、大丈夫です。

(^^)/”

[ ]
RE:03938 HMJRE.DLLでの正規表現置換No.03939
Arimac さん 03/11/04 22:48
 
古い正規表現では'^'と'$'はそれぞれ正規表現の先頭と最後だけで
特殊な意味を持っていて、それ以外の場所ではその文字自身に
マッチします。
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/regex.7.html
JRE32.DLLは古い正規表現の規則に準じているようです。
HMJRE.DLLは新しい正規表現の解釈に従っているようで、
これは互換性上まずいかもしれません。
斉藤秀夫氏が気づかれていないようでしたら連絡した方が
良いような気がします。

[ ]
RE:03938 HMJRE.DLLでの正規表現置換No.03945
かよ さん 03/11/05 21:12
 
たけのこさん、こんばんは。

>     replacedown "\\$mn\\[[0-9]+\\]","$mn[" + str(#i) + "]",regular;
>
>で、大丈夫です。

 上のように修正して、HMJRE.DLL V0.19で正常に動くことを確認
しました。
 頻繁に使うマクロなので、これでひと安心です。
 ありがとうございました。
                  かよ

[ ]
RE:03939 HMJRE.DLLでの正規表現置換No.03946
かよ さん 03/11/05 21:17
 
Arimac さん、こんばんは。

>古い正規表現では'^'と'$'はそれぞれ正規表現の先頭と最後だけで
>特殊な意味を持っていて、それ以外の場所ではその文字自身に
>マッチします。

 '$'がメタキャラクタであるにもかかわらず、JRE32.DLLのもとでは、
エスケープ文字の'\'でエスケープしてなくても通用していたのには、
このような背景があったのですね。参考になりました。

>http://www.linux.or.jp/JM/html/LDP_man-pages/man7/regex.7.html

 一応コピーしました。すぐには理解できそうもないので、いずれ
じっくり読んでみようと思います。

 ご教示、ありがとうございました。
                  かよ

[ ]