正規表現の行頭文字の置換について

  1. いつも便利に使わせていただいております。
    x64 ver2.6.7 ですが、期待と違う動作となっておりますので、ご教示いただければと存じます。
    以下のように、先頭の一文字を置換で削除しようとした場合、改行を残して全て消えてしまいました。

    【元のテキスト】
    --------------------------------
    abcde
    bcdef
    cdefg
    --------------------------------

    【置換】
    置換前「^.」←ドット「.」です
    置換後「」←何も指定していません

    【期待する結果】
    --------------------------------
    bcde
    cdef
    defg
    --------------------------------

    【実際の結果】
    --------------------------------

    --------------------------------
    (↑改行を残して削除)

     |  やまもんた  |  返信
  2. 2.6.14 でも(検索ハイライトは行頭1文字のみを強調しますが)各行の改行のみを残して文字列部分はすべて削除され、"^.{1}" → "" でも結果は同様ですね。
    また、サクラエディタ、gPad では【期待する結果】のとおりの結果になり、notepad++ では mery とおなじ結果でした。

    > やまもんた さん
    "^.(.+)$" → "$1"
    で置換すれば mery でも【期待する結果】のとおり "行頭1文字の削除" になりました(検索ハイライトは行全体になります)。

     |  sukemaru  |  返信
  3. >sukemaruさん

    丁寧なレスをありがとうございました。
    秀丸エディタでも【期待する結果】となりました。

    また、下記の技をご教示いただきありがとうございました。
    > "^.(.+)$" → "$1"
    > で置換すれば mery でも【期待する結果】のとおり "行頭1文字の削除" になりました

    今回は絶対に使われていそうもない語句に置き換えて、それを削除することで
    しのぎましたが、こちらのほうがエレガントですね。

     |  やまもんた  |  返信
  4. >> やまもんた さん
    ご愛用いただきありがとうございます。

    正規表現による置換ですが、sukemaru さんがご回答くださっているとおり、Mery の「すべて置換」の仕様によるものです。

    置換の仕様はエディタによって異なり、サクラさんや gPad さんは全体に対して一度だけ置換を行う方式、Mery や NotePad++ などは置換を繰り返して行う方式となっています。

    置換を繰り返す方式は、「すべて置換」ではなく「置換」ボタンを連打してみると、動作が分かりやすいと思います。

    どちらの方式も一長一短で、Mery や NotePad++ 方式だと置換や検索で取りこぼしが発生しないため、正規表現を頑張れば自由度は高いのですが、ご指摘の通り【期待する結果】が分かりづらいというデメリットがございます。

    国産のテキストエディタでは Mery 方式のほうが少ないため、長いものには巻かれたいなぁと思いつつも、今から仕様変更すると既存の正規表現やマクロに影響が及ぶため、そっとしている状態です。

     |  Kuro  |  返信
  5. >kuro さん

    返信が遅くなってしまいましたが、ご回答ありがとうございました。
    確かに置換を連打すると、次々と置換されていく様子が明確にわか
    り、納得いたしました。

    この仕様を理解した上で今後も愛用させていただきます。

    やまもんた

     |  やまもんた  |  返信
  6. 自分の場合、各行に1度だけ処理を行うならどう解釈しても行単位でやるように改行除外させちまいますb

    ^[^\n]([^\n]*\n)

     |  クリ廃止  |  返信
スポンサーリンク