1 件の投稿を表示中 (合計 3 個)
  • 作成者
    投稿
  • #4408
    arere
    メンバー

    こんにちは。

    C/C++のソースコードの編集をしていて
     }
     else{
    という記述を
     } else {
    と修正するために、検索文字として
    }[ t]*n[ t]*else[ t]*{
    という指定をしてファイルから検索・置換を実行しても何もヒットしません。
    検索文字の最初の「}」を削ると
    大量にヒットし、その中には「}[ t]*n[ t]*else[ t]*{」
    にマッチするものもあり、当該ファイルを開いてファイル内検索・置換では「}[ t]*n[ t]*else[ t]*{」できちんとマッチします。

    かといって
     }
     if(condition){
    を検索するために
    }[ t]*n[ t]*if.*{
    といった指定や
    }[ t]*n[ t]*if[.]?.*{
    指定をファイルから検索した場合はきちんとマッチします。

    ファイルから検索で
    }[ t]*n[ t]*else[ t]*{
    ではなく、
    }[ t]*n[ t]*else{
    で指定しても該当する行を含むファイルがあるもののマッチしませんが、
    }[ t]*n[ t]*else[ t]*
    では該当行にマッチします。
    :-(

    環境はVista Ultimate x64
    EmEditorは 6.00.4 x64日本語版です。

    #4411
    匿名
    ゲスト

    もし、対象ファイルがCRLFの改行コードなら、
    ファイルから検索置換は、CR と LF を区別するので、

    n

    rn

    こうすれば、マッチするかもしれません。
    先頭の}をはずすと、

    [ t]*n[ t]*else[ t]*{

    先頭の正規表現が空文字でもいいため、nでもマッチするのです。
    ファイルの改行コードを確認してみてください。
    改行コード気にしたくない場合は、

    [rn]+
    (rn|[rn])

    などが、マクロのJavaScriptなんかも同様で、
    正規表現で便利ですよ。

    #4414
    arere
    メンバー

    perlerさん、フォロー有り難うございます。
    ファイルからの検索・置換時、CRとLFを区別するという仕様を確かに過去に見掛けた記憶がありますが、すっかり失念していました。
    御陰様で目的の処理をおこなうことが出来ました。
    有り難うございました。

1 件の投稿を表示中 (合計 3 個)
  • このトピックに返信するにはログインしてください。