タグ付き正規表現による置換No.19226
じゅ さん 05/04/27 15:59
 
「\f」を含む文について、正規検索での置換が思うようにできません。

たとえば、

  元の文: \f0123
  置換後: 0123

のように置換したいのですが、すべての文字がなくなってしまい
ます。

  検索文字列: \\f\f[0-9]+\f
  置換文字列: \1

どの指定がいけないのでしょうか。

[ ]
RE:19226 タグ付き正規表現による置換No.19227
アルビレオ さん 05/04/27 17:33
 
秀丸ユーザーのアルビレオです。

\f0123に対していろんな条件で置換してみました。
秀丸 V4.16、HMJRE V1.12

検索: \f0123\f 置換: ,\0,\1,\2
結果: \f,,0123,
(正常)

検索: f\f0123\f 置換: ,\0,\1,\2
結果: \,f,0123,
(正常)

検索: \\f\f0123\f 置換: ,\0,\1,\2
結果: ,,,
(異常)

検索: \\f0123 置換: ,\0,\1,\2
結果: ,,,
(異常)

どうもヒットした文字列に"\f"が含まれるとおかしくなっている気がします。
現在ベータ版では()によるタグつき正規表現がサポートするように変更されたの
で、その過程で直っていたりして。

[ ]
RE:19226 タグ付き正規表現による置換No.19228
三月 さん 05/04/27 17:41
 
>「\f」を含む文について、正規検索での置換が思うようにできません。
>
>たとえば、
>
>  元の文: \f0123
>  置換後: 0123
>
>のように置換したいのですが、すべての文字がなくなってしまい
>ます。
>
>  検索文字列: \\f\f[0-9]+\f
>  置換文字列: \1
>
>どの指定がいけないのでしょうか。

全然回答ではないですが、
  検索文字列: \\f\f\f[0-9]+\f
  置換文字列: \2
でやるとうまくいったりします。最初の\\fを区切り記号と解釈してるみたいですね。
HMJRE.DLL V1.59
JRE32.DLL V1.17
どちらもおなじみたい。

[ ]
RE:19227 タグ付き正規表現による置換No.19229
山紫水明 さん 05/04/27 17:44
 
 じゅさん,アルビレオさん,こんにちは。

>どうもヒットした文字列に"\f"が含まれるとおかしくなっている気がします。

 この場合どうも "\" がエスケープされてないようですね。
とりあえず,
  検索文字列: (\\)f\f[0-9]+\f
として,"\" を切り離してしまえばいいようです。

     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:19227 タグ付き正規表現による置換No.19230
秀丸担当 さん 05/04/27 17:47
 

調べてみたところ、検索文字列に\\fという文字があると\\を無視せずに\fを認
識してしまっていたのが問題のようです。
V5.00β20で修正させていただきます。

[ ]
RE:19226 タグ付き正規表現による置換No.19233
じゅ さん 05/04/27 19:47
 
先ほど、自分の環境を書いたコメント(no. 19231)を新規投稿して
しまいました。確認が足りず、申し訳ありません。

先ほど秀丸のサイトを見ると、さっそくβ20が出ていて感動しました。
β20で確認したところ、「\\f\f[0-9]+\f」で置換できるように
なりました。ありがとうございます。

[ ]