#11697

redakt55
参加者

欲張りマッチになっているわけではなく,まず「1t」を空文字列に置換したあと,「hogefuga1」の先頭から次の探索を始めるのですが,その際に「hogefuga1」の左端を行頭とみなして,「hogefuga1t」を空文字列に置換してしまう,その繰り返しなのだと思います。

最初の置換のあと,新たに〈行頭〉になってしまった箇所を行頭とみなすかどうかは,ツールによって違うようですね。
どちらが正解ということはないと思います。
たぶん,プログラミング言語や正規表現ライブラリー自体の動作は,これを行頭とみなさないほうが普通ではないかと思います。
テキストエディターではこれを行頭とみなすものも少なくない気がします。

しかし,ちょっと調べたところ,EmEditor の現在の動作は確かに不可解なところがあります。
こんな実験をしてみましょう。
「A3A3A3」というテキストを用意します。
・「^A3」を空文字列に置換すると「A3A3」になります。
・「^.3」を空文字列に置換すると「A3A3」になります。
・「^A.」を空文字列に置換すると「A3A3」になります。
・「^..」を空文字列に置換すると「A3A3」になります。
・「^Ad」を空文字列に置換すると空文字列になります。
・「^w3」を空文字列に置換すると空文字列になります。
・「^wd」を空文字列に置換すると空文字列になります。
どうも,検索パターンに「」が含まれているか否かで動作が違っているのではないか,という気がします。

さらに調べを進めたところ,[ツール]→[カスタマイズ]→[検索]で,「正規表現が改行に一致することができる」を ON にしたときは上記のいずれの場合も空文字列になりました。

理由のあることなのかも知れませんが,ユーザーにとっては混乱の元なので,現状の仕様は望ましくないと思います。