ありがとうございました。「x*」の置換にNo.10954
にひら さん 02/01/12 22:02
 
 KITAさん、ませまさん、えるさん、御回答ありがとうございました!
自分の間違いに気付くことができ、また疑問に関しましてもおかげさまで納得するこ
とができました。

 置換の動作に関しましては、その後調査してみましたところ以下のようなことがわ
かりました。

(例1)
------------------------------------------------------
あいうえお[EOF]
------------------------------------------------------
 この1行のみのファイルで
replaceallfast "x*", "abc", ta;
を実行しても何もおきない。

(例2)
------------------------------------------------------
あいうえお↓
[EOF]
------------------------------------------------------
 改行(↓で示した)を含めた2行のファイルで同じく
replaceallfast "x*", "abc", ta;
を実行すると、「改行の前」にマッチしたらしく、「あいうえお」と
改行の間に無限にabcが挿入され続けた。

(例3)
------------------------------------------------------
xyzあいうえお[EOF]
------------------------------------------------------
 この1行のみのファイルで
replaceallfast "x*", "abc", ta;
を実行するとファイル先頭に無限にabcが挿入され続けた。

 "x*"が"xの0回以上の繰り返し"という意味であるならば、3つの
例ともファイル先頭にマッチするのではと予想していたのですが
そうではありませんでした。
 結果をまとめますと
●2バイト文字と[EOF]のみのファイルでは全くマッチしない
●「1バイト文字の前」にマッチするらしい
となっています。
 これらの動作を考察してみますと、"xの0回以上の繰り返し"
という場合も「x」に当てはまる1バイト文字が有ってはじめて
マッチ対象となる仕様になっているのだと思いました。(例1)と
(例2)から「2バイト文字は"x*"の対象にならない」と思えますし、
(例2)と(例3)においては「改行」と「x」の【前】がマッチして
いるようであるからです。

 いずれにしましてもJRE32.DLLの仕様に関わる問題であり
秀丸本体とはあまり関係ないことだと思いますが、お礼だけ
を書くのもナニかと思い、調べた結果を書かせて戴きました。

 ありがとうございました。失礼致します。

[ ]
RE:10954 ありがとうございました。「x*」No.10956
える さん 02/01/13 02:31
 
> この1行のみのファイルで
>replaceallfast "x*", "abc", ta;
>を実行しても何もおきない。

検索/置換系の関数に ta というオプションはないのでこれはマクロの文法エラーに
なると思います。
前の投稿のように「正規表現の利用」を意味する regular を指定すれば正常(?)に動
作します。
(つまり、延々と文頭に abc を挿入し続ける)

regular を指定しない場合は正規表現を利用しないので、"x*" という文字列そのも
のを置換することになります。

[ ]
RE:10956 ありがとうございました。「x*」No.10961
にひら さん 02/01/13 18:12
 
 えるさん、御指摘ありがとうございました。

> >replaceallfast "x*", "abc", ta;
>
> 検索/置換系の関数に ta というオプションはないのでこれはマクロの文法エラーに
> なると思います。

 これは
> >replaceallfast "x*", "abc", regular;
の間違いです。

 修正して再度まとめます。

==========ココカラ==================================================
 置換の動作に関しましては、その後調査してみましたところ以下のようなことがわ
かりました。

(例1)
------------------------------------------------------
あいうえお[EOF]
------------------------------------------------------
 この1行のみのファイルで
replaceallfast "x*", "abc", regular;
を実行しても何もおきない。

(例2)
------------------------------------------------------
あいうえお↓
[EOF]
------------------------------------------------------
 改行(↓で示した)を含めた2行のファイルで同じく
replaceallfast "x*", "abc", regular;
を実行すると、「改行の前」にマッチしたらしく、「あいうえお」と
改行の間に無限にabcが挿入され続けた。

(例3)
------------------------------------------------------
xyzあいうえお[EOF]
------------------------------------------------------
 この1行のみのファイルで
replaceallfast "x*", "abc", regular;
を実行するとファイル先頭に無限にabcが挿入され続けた。

 "x*"が"xの0回以上の繰り返し"という意味であるならば、3つの
例ともファイル先頭にマッチするのではと予想していたのですが
そうではありませんでした。
 結果をまとめますと
●2バイト文字と[EOF]のみのファイルでは全くマッチしない
●「1バイト文字の前」にマッチするらしい
となっています。
 これらの動作を考察してみますと、"xの0回以上の繰り返し"
という場合も「x」に当てはまる1バイト文字が有ってはじめて
マッチ対象となる仕様になっているのだと思いました。(例1)と
(例2)から「2バイト文字は"x*"の対象にならない」と思えますし、
(例2)と(例3)においては「改行」と「x」の【前】がマッチして
いるようであるからです。

 いずれにしましてもJRE32.DLLの仕様に関わる問題であり
秀丸本体とはあまり関係ないことだと思いますが、お礼だけ
を書くのもナニかと思い、調べた結果を書かせて戴きました。

 ありがとうございました。失礼致します。

[ ]
RE:10961 ありがとうございました。「x*」No.10965
える さん 02/01/13 18:35
 
っと、手元の環境が少し変のを忘れていました。

> これらの動作を考察してみますと、"xの0回以上の繰り返し"
>という場合も「x」に当てはまる1バイト文字が有ってはじめて
>マッチ対象となる仕様になっているのだと思いました。(例1)と
>(例2)から「2バイト文字は"x*"の対象にならない」と思えますし、
>(例2)と(例3)においては「改行」と「x」の【前】がマッチして
>いるようであるからです。

1), 2) についてはそれっぽい動きをしていて、何か変ですが、
3) については xyz の "x" がマッチしますよね?
( と、一応普通の JRE32.DLL で動作チェックしました )

[ ]
RE:10965 ありがとうございました。「x*」No.10966
にひら さん 02/01/13 18:56
 

 にひらです。えるさん、確認ありがとうございました。

> > これらの動作を考察してみますと、"xの0回以上の繰り返し"
> >という場合も「x」に当てはまる1バイト文字が有ってはじめて
> >マッチ対象となる仕様になっているのだと思いました。(例1)と
> >(例2)から「2バイト文字は"x*"の対象にならない」と思えますし、
> >(例2)と(例3)においては「改行」と「x」の【前】がマッチして
> >いるようであるからです。
>
> 1), 2) についてはそれっぽい動きをしていて、何か変ですが、
> 3) については xyz の "x" がマッチしますよね?
> ( と、一応普通の JRE32.DLL で動作チェックしました )

 はい。"x"にマッチします。
 そう書いたつもりだったのですが、書き方が曖昧でしたでしょうか。
書き直しますと、

 これらの動作を考察してみますと、"xの0回以上の繰り返し"
という場合も「x」に当てはまる1バイト文字が有ってはじめて
マッチ対象となる仕様になっているのだと思いました。(例1)と
(例2)から「2バイト文字は"x*"の対象にならない」と思えますし、
(例2)においては「改行」、(例3)においては「x」の【前】に挿入が
なされるからです。

 前回まとめた際にも書いたのですが

>  いずれにしましてもJRE32.DLLの仕様に関わる問題であり
> 秀丸本体とはあまり関係ないことだと思いますが、お礼だけ
> を書くのもナニかと思い、調べた結果を書かせて戴きました。

ということで、あまり秀丸本体と関係ない話題になってしまって
失礼しました。
 勉強になりました。ありがとうございました。

[ ]