|
秀丸の「置換」で「全置換」を行う時、「正規表現を使用」にして検索文字列
として「行の先頭(^:カレット)」を使用していると、どうも置換の様子が変
です。
例えば "^." → ""(行の先頭の1文字を削除)という置換を行うと、テキスト
がすべて消えてしまいます。
この動作では、"^."を""に置換した時にその行の先頭にメタキャラクタ"^"がマッ
チしているにも関わらず、その次の置換で再度、既にマッチしている(つまり、
再度マッチするべきではない)同じ位置に"^"がマッチしてしまっていることに
なります。
意味がわかりづらいと思うので、例を挙げます。
行の先頭から「ABCDE」と書いてあるとします。これに対して "^A" → "" とい
う全置換を行うと「BCDE」になります。(正常)
ところが「ABCDE」に対して "^." → "" という全置換を行うと、文字列はなく
なってしまいます。(異常)
試しに「ABCDE」に対して "^(A|BC)" → "" という全置換を行うと、「DE」に
なってしまいます。つまり、もとの文字列には"^A"しかマッチしないはずなの
に、元の文字列ではマッチしないはずの"^BC"にも置換の過程でマッチしてしまっ
ているのです。
この動作では、同じ行の行頭が1回の操作で2回マッチしていることになりま
す。全置換では「置換後の文字列に対して再度置換を行う」という動作をして
いるようで、このようなことが発生します。
1回の「置換」を連続して行うのであれば置換後の文字列に対して再度置換し
て当然ですが、「全置換」では同じ位置に対して何度もマッチすることのない
ように対処するべきではないと思います。いかがでしょうか。
--
のぶ
|
|