正規表現置換の不思議No.17309
かとちん さん 04/06/07 10:11
 
みなさんこんにちわ。

秀丸エディタ4.06で、
選択範囲中の全ての行の前に、' を、行末に '+ を、
入れようと思い、正規表現での置換で、

検索: \f^.*\f
置換: '\1'+

としましたが、「analyzing...」のまま動作せず、
キャンセルするしかなくなってしまいます。
置換文字列を、'\1'\+  としても変わりませんでした。

それならばと、置換文字列を、\'\1\'\+  としたところ、
うまくいきました。でも ' がなぜエスケープ対象文字なのか、
探し当てられませんでした。

' は正規表現のなんの機能にあたるんでしょうか?

ご存じの方よろしくお願いします。m(_ _)m


#間違えて xxxxxxxxxxxxxx@maruo.co.jp に
#直接送ってしまいました。失礼しました。m(_ _;)m


_/_/_/ BATTLE-TRIED PROGRAMMER katochin
_/_/_/ http://homepage2.nifty.com/t-katochin/

[ ]
RE:17309 正規表現置換の不思議No.17311
アルビレオ さん 04/06/07 11:41
 
秀丸ユーザーのアルビレオです。

>' は正規表現のなんの機能にあたるんでしょうか?

' は特別な意味を持ちません。問題は他のところにあります。
それはさておき、
>検索: \f^.*\f
>置換: '\1'+
こういう置換をするなら \f を使う必要はありません。
検索: ^.*
置換: '\0'+
で十分なので、わかりやすくするためにも後者のものを基本に説明します。

>としましたが、「analyzing...」のまま動作せず、
>キャンセルするしかなくなってしまいます。

こちらで確認してみましたが、「全て置換」でなければ正しく終了しました。
一括置換したときには置換後の文字にもう一度マッチしてしまいます。

元文字列: あいうえお
置換後 : 'あいうえお'+
置換続き: ''あいうえお'+'+
置換続き: '''あいうえお'+'+'+

これを防ぐには
・先頭が ' なら置換しないようにする
  検索: ^[^'].*
これだと空行は置換されません。
その方が都合がいいならこちらでいいでしょう。

・置換の処理を同じところで繰り返さないようにする
  検索: (^.*)
こちらは空行も ''+ に置換されます。

[ ]
RE:17311 正規表現置換の不思議No.17312
秀まるお2 さん 04/06/07 11:51
 
 範囲選択して実行すると、たしかにanalyzing...で固まる症状が確認できまし
た。

 詳しくは秀丸担当の方からコメントさせていただきます。少々お待ちください。

[ ]
RE:17312 正規表現置換の不思議No.17313
かとちん さん 04/06/07 12:25
 
アルビレオさん、秀まるお2 さん、こんにちわ。
マルチレスにて失礼します。

> で十分なので、わかりやすくするためにも後者のものを基本に説明します。

おお!その通りですね。
どうもすみません。

> >としましたが、「analyzing...」のまま動作せず、
> >キャンセルするしかなくなってしまいます。
>
> こちらで確認してみましたが、「全て置換」でなければ正しく終了しました。
> 一括置換したときには置換後の文字にもう一度マッチしてしまいます。

こちらでは、全て置換ではうまくいくようです。
使っているバージョンの違いでしょうかね?


>  範囲選択して実行すると、たしかにanalyzing...で固まる症状が確認できまし
> た。
>
>  詳しくは秀丸担当の方からコメントさせていただきます。少々お待ちください。

…あ、それです。範囲選択での一括置換です。
状況説明が足りなくてすみませんでした。

でもご指摘の通りで、私のケースの \f を使う場合に限り固まるようです。

というわけで、' には意味が無いということは伝わりました。
どうもです。m(_ _)m


_/_/_/ BATTLE-TRIED PROGRAMMER katochin
_/_/_/ http://homepage2.nifty.com/t-katochin/

[ ]
RE:17313 正規表現置換の不思議No.17315
秀丸担当 さん 04/06/07 17:16
 

>…あ、それです。範囲選択での一括置換です。
>状況説明が足りなくてすみませんでした。
>
>でもご指摘の通りで、私のケースの \f を使う場合に限り固まるようです。

確認することができました。
範囲選択内に幾つ該当の検索文字列があるかをカウントするときに、改行だけの
行があるときにヒットした文字数がゼロになり、無限ループになっていました。
V4.10β33のほうで修正させていただきます。

[ ]