◀一般トップへ
  • 2702 行頭に文字列挿入する方法
    • 2703 RE: 行頭に文字列挿入する方法
    • 2815 Re:行頭に文字列挿入する方法
      • 2822 Re2:行頭に文字列挿入する方法
      • 2825 Re2:行頭に文字列挿入する方法
        • 2834 Re3:行頭に文字列挿入する方法
          • 2836 Re4:行頭に文字列挿入する方法
            • 2837 Re5:行頭に文字列挿入する方法
  • [2702] 行頭に文字列挿入する方法 TED 2003年02月06日 12:02

    置換機能を用いて正規表現をONにし、 置換前に ^ を
    置換後に適当な文字列を指定して、文字列を行頭に
    挿入したいのですがうまく動作しません。
    どのようにしたら良いかお教えください。

    • [2703] RE: 行頭に文字列挿入する方法 すい 2003年02月06日 17:16

      例えば「行頭に // 2文字を挿入」だと
       置換前:^.|\n
       置換後://$&
      の正規表現置換かと。

      ★意味
      ----------
      ^:行頭
      .:任意の1文字
      |:どちらか
      \n:LF(0x0a)改行
      $&:検索でマッチした文字列全体に置き換わる

      行頭の任意1文字を「"//" + 検索結果マッチした文字列」に置換、って。

      ちなみに "^\n" の記述は LF改行ファイルの空行に対して処理するために必要。
      CR改行・CRLF改行ファイルの空行は、CR(0x0d) が通常の1文字として扱われるため
      "." にマッチするので、特別な考慮は不要、"^." でok。
      "^\n" と "^." を1個にまとめて "^.|\n" になった、と。
      ----------

      でも、そもそもこのエディタのユーザーは この手の作業を正規表現置換でやる人いませんよぉ。
      「矩形範囲選択して文字入力」の方が楽ですもん。
      もちろん、あんまりにも処理対象行が多い、とかいう場合は別かもしれませんが。
    • [2815] Re:行頭に文字列挿入する方法 MMX 2003年03月12日 13:52

      ▼ TEDさん
      ^(.*)
      HEAD\1
      の置換はできました。しかし、トリッキー
      ふつうの正規表現ソフトは ^ 一文字で
      動作するが。
      サクラエディタ・ローカルテクです
      • [2822] Re2:行頭に文字列挿入する方法 みく 2003年03月12日 18:55


        お望みの機能は

        置換前:^
        置換後:挿入文字列
        正規表現:チェック
        置換範囲:選択始点挿入

        だと思いますが、正規表現を使った場合の
        選択文字以外の置換範囲指定は正しく動作
        しません。
      • [2825] Re2:行頭に文字列挿入する方法 すい 2003年03月13日 00:59

        >^(.*)
        >HEAD\1

        ちょっとマズイかと。置換後文字列中で \1 を使っている。
        このエディタが利用している正規表現ライブラリ自体は perl 互換です。
        ですので、perl ライクに「HEAD$1」と記述しないと。

        あと、検索文字列が .* じゃ「LF改行のテキストファイル中の空行」の行に対して処理できませんよ。
        CR改行 or CRLF改行 のテキストなら問題ありませんが。

        >の置換はできました。しかし、トリッキー
        >ふつうの正規表現ソフトは ^ 一文字で
        >動作するが。
        >サクラエディタ・ローカルテクです

        その通りです。
        ハッキリ言えばこれは不具合です。
        ^ 1文字で行頭に文字挿入できるのが本来期待されるべき姿でしょう。

        しかしながらその辺を直せる人がおらず、皆ず~~っと修正してくれる人が
        登場するのを待っている、という状況です。

        現状、この ^ や $ だけでなく、行頭・行末・改行がらみの検索・置換処理周辺は
        色々と挙動がぁゃιぃです。

        ここで紹介しているのは
        「この辺の不具合を直してくれる方が登場するまで暫定的にこれら不具合を
         回避するためのテクニック」
        です。「不具合があるから、その処理は出来ません」じゃぁ情けないでしょ。 (^^;
        工夫すればなんとか使えるんだし。
        • [2834] Re3:行頭に文字列挿入する方法 MMX 2003年03月26日 14:16

          たしかに、幅0のマッチは不得意のようです
          置換の¥1は有効だが?MIFES互換とかの隠し
          仕様ですか?
          パズルの別の答え ^([^\n]*\n*) → HEAD\1
          • [2836] Re4:行頭に文字列挿入する方法 すい 2003年03月27日 03:26

            >たしかに、幅0のマッチは不得意のようです
            >置換の¥1は有効だが?MIFES互換とかの隠し
            >仕様ですか?

            だから perl の仕様だってば。

            perl では
            「・検索文字列の中(パターンの中)   → 前方から登場した ( ) から順に \1,\2,\3 ...
             ・検索文字列の外(置換後文字列など) → 前方から登場した ( ) から順に $1,$2,$3...
             と記述する。置換後文字列中などで \1 を使うのは悪習じゃぁ。やめれ。
             \1 じゃぁ、ひょっとしたら期待通りに動くかもしれんが、使い方によっては期待通りに動かんぞ。」

            という事になっていますよね。
            perl スクリプトで置換後の文字列中で \1 を使う人は普通いません。( perl の仕様を理解していない人を除いて)
            • [2837] Re5:行頭に文字列挿入する方法 MMX 2003年03月27日 13:55

              > だから perl の仕様だってば。
              秀丸、xyzzy、JmEditorなどでも
              有効なので¥1とばかり思っていました。
              テキストエディタの歴史はPerl5より長いですから