◀一般トップへ
  • 5255 タグ付き正規表現
    • 5257 Re:タグ付き正規表現
      • 5260 Re2:タグ付き正規表現
    • 5258 RE: タグ付き正規表現
  • [5255] タグ付き正規表現 もー 2006年06月01日 17:08

    この↓文字列を
    「000133000800000000000001000C01020006000233000800000000000001000D01020005000333000900000900000000000001040005」

    以下のように置換したいのですが、可能でしょうか
    0001 33000800 00000000 0001000C 0102 0006
    0002 33000800 00000000 0001000D 0102 0005
    0003 33000900 00090000 00000000 0104 0005

    なお、秀丸のHMJRE.DLLでは

    置換前 : [0-9A-F]{4}\f[0-9A-F]{8}\f[0-9A-F]{8}\f[0-9A-F]{8}\f[0-9A-F]{4}\f[0-9A-F]{4}
    置換後 : \0 \1 \2 \3 \4 \5\n

    で可能でしたが、サクラだと(というかBREGEXP.DLL?)だと\fは使えないようでした。
    • [5257] Re:タグ付き正規表現 じゅうじ 2006年06月01日 20:55

      ▼ もーさん
      //キーボードマクロのファイル BINARYHEX.MAC
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_IndentSpace(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_IndentSpace(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_IndentSpace(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_IndentSpace(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_IndentSpace(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Right(0);
      S_Char(13);
      • [5260] Re2:タグ付き正規表現 じゅうじ 2006年06月03日 01:34

        > ▼ もーさん
        秀丸の正規表現¥fタグ付き正規表現

        タグ付き正規表現2個の場合
        HIDEMARU
        A¥fB

        SAKURA
        (A)(B)

        タグ付き正規表現3個の場合
        HIDEMARU
        A¥fB¥fC

        SAKURA
        (A)(B)(C)

        以下同様に、4個、5個、...
        置換後のタグの番号は\1から始まります。

        従って、
        置換前 : (.{4})(.{8})(.{8})(.{8})(.{4})(.{4})
        置換後 : \1 \2 \3 \4 \5 \6\n
        全て置換

        どうぞ、これで、試して見て下さい。
    • [5258] RE: タグ付き正規表現 すい 2006年06月02日 00:25

      >サクラだと(というかBREGEXP.DLL?)だと\fは使えないようでした。

      正規表現タグで「\f で区切る」なんていう滅茶苦茶ヘンテコな記述を
      するのは秀丸くらいではないかと。 (;^^A
      世の中の一般的な正規表現が使えるユーティリティでは、
      「何らかの括弧で括る」というのが一般的です。
      \(~\) とか {~} とか...
      括弧の種類がユーティリティ毎にまちまちです。

      で、サクラエディタで使用されている BREGEXP.DLL は perl という
      ユーティリティと ほぼ互換の正規表現で、タグは (~) で括る事に
      なっています。

      (~) で括られた範囲の検索語にマッチした文字列が、先頭の括弧から順に
      ・検索文字列中 :\1 , \2 , \3 , ...
      ・置換後文字列中:$1 , $2 , $3 , ...
      に入ります。

      例えば、検索文字列が「(.*)\t(.*)\t\2\t\1」ならば

      ## 「→ 」がタブとする。

      ABC→ DEF→ DEF→ ABC

      のような文字列を検索する事が出来ます。

      また、(~) 表記部分は、一塊の文字列として取り扱えます。
      例えば「([0-9A-F]{4}\t){2}」とか。
      {2} の「2回」の表記は、その前の一塊「([0-9A-F]{4}\t)」
      にかかります。つまり「[0-9A-F]{4}\t[0-9A-F]{4}\t」という表記と
      等価です。

      もちろん括弧を入れ子にする事も可能なわけで、「(([0-9A-F]{4}\t){2})」
      とすれば、「([0-9A-F]{4}\t){2}」にマッチした文字列部分が \1 に
      入るわよ、と。
      # こういう表記が秀丸の \f では無理かな。

      なお、置換する場合には置換後文字列中では \1 , \2 , \3 ,... ではなく、
      $1 , $2 , $3 を使うという事に注意。この辺がちょっと嫌らしい所
      なのですが。

      置換後文字列に \1 , \2 , \3 を使っても、大抵は それっぽく
      動作しますが、perl では稀に \1 , \2 ,... では駄目なパターンも
      あるらしいので、置換後文字列中では $1 , $2 の表記を使用するように
      した方が無難かと。

      他、置換後文字列中では $& が「検索にマッチした文字列全体」と
      なります。

      ・置換前:(([0-9A-F]{4}\t){2})
      ・置換後:$1 だわさ

      のような置換の場合、検索文字列全体をわざわざ (~) で括らなくても $& を使って

      ・置換前:([0-9A-F]{4}\t){2}
      ・置換後:$& だわさ

      で OK という事で。

      他、まだまだ色々なメタ文字とかがありますが、詳しい事は perl の
      正規表現を調べるとよろしいのではないかと。