◀一般トップへ
  • 7297 1.6.5->1.6.6での改行(正規表現)の扱い
    • 7298 Re:1.6.5->1.6.6での改行(正規表現)の扱い
      • 7299 Re2:1.6.5->1.6.6での改行(正規表現)の扱い
  • [7297] 1.6.5->1.6.6での改行(正規表現)の扱い まくら 2011年01月28日 20:17

    空行(改行だけの行)の正規表現
    ^\r\n$
    を使った検索時の動きが1.6.5と1.6.6で異なります。

    1.6.5は意図したとおりに検索されますが、
    1.6.6ではヒットしません

    正規表現エンジンは
    bregonig.dll Ver.1.45 with Onigruma 5.9.1
    です。
    1.6.5のパッケージに1.6.6のexeのみ
    差し替えて比較しています。

    1.6.6から扱いが変わったのでしょうか?
    • [7298] Re:1.6.5->1.6.6での改行(正規表現)の扱い ds14050 2011年01月29日 00:15

      はい。変えてしまいました。

      1.6.5と 1.6.6の間で、bregonig.dllを使っているときの正規表現検索
      に違いがあります。「.」が \nに加えて \rにもマッチしなくなり、
      「$」のマッチ範囲が \r,\nを含む行末(条件により \r,\nを含まない)から、
      常に \r,\nを含まない行末になりました。

      1.6.5の $は .や否定の文字クラスと組み合わせたときに CRLFの LFのみと
      マッチしてしまい、改行文字が意図せず<del>LFに</del>変わってしまう不都合がありました。
      $は(他の実装にならえば)「文字列の末尾(最後の文字の直後)」と、フラグにより
      「行末(改行文字の直前)」にマッチするものです。$が改行文字の直前(行末)と
      直後(行文字列の末尾)の両方にマッチする選択肢もないではなかったのですが、
      その場合、$を対象に一括置換を行ったときに、一行につき二回ずつ置換が行われる
      不都合がありました。

      $は「行末(改行文字の直前)」にのみマッチする
      ということで理解をいただきたいと考えています。

      # 不具合修正や機能追加が行われた bregonig.dll 1.48が
      # K.Takata氏によりリリースされています。
      • [7299] Re2:1.6.5->1.6.6での改行(正規表現)の扱い まくら 2011年01月29日 13:20

        ご説明ありがとうございました。

        > $は「行末(改行文字の直前)」にのみマッチする
        > ということで理解をいただきたいと考えています。

        ということなので、
        ^$\r\n
        に変更したらうまくいきました。

        書きっぱなしのマクロの動作が変わってしまうかも
        しれないので1.6.5以前のモードで動く設定も
        あったらいいなと思います。