◀ANSI版開発トップへ
  • 3335 RE: .$ 置換(不具合?)
    • 3337 Re2: .$ 置換(不具合?)
  • [3335] RE: .$ 置換(不具合?) かろと 2003年12月14日 20:54


    一般[3548]のレスの続きです。

    >. には[CR]を含めないのが「ヘルプ」以前の本来の仕様なのだと思います。

    『「ヘルプ」以前の』という意味がわかりませんが、
    . は、[CR]又は[LF]以外の文字にマッチするのが、本来の仕様なのではないか?言われていると理解しました。

    ここがつらいところなのですが、
    残念ながら、サクラで使っている正規表現ライブラリ(BREGEXP.dll)内部で「.」は、[LF]以外と扱われているので
    どうしても、「.」は[CR]にマッチしてしまうのが現状です。


    今回の、

    >「.$」⇒「」or「\r」
    >「..$」⇒「」or「\r」
    >正規表現ですが、結果が大きく異なります。

    という置換で、結果が異なるのは、
    開発[2826]で実施した、$の行末文字の処理を特別扱いの対象になったか否かで決まっているようです。

    $の特別処理で、$側に、[CR][LF]の両方を含んでいるかのように扱っているので、
    後者の方はあたかも「.」が[CR」を含まないように振る舞います。
    しかし、今のアルゴリズムでは「.$」は特別扱いの対象にならないため、
    ライブラリの仕様通り、「.」が[CR]にマッチしているようです。


    恐らく、上記から推測するに、じゅうじさんは、
    >「..$」⇒「」or「\r」
    の動作が、期待する置換だと言われているのですよね?

    $の特別処理に手を入れれば、
    >「.$」⇒「」or「\r」
    も、同じように特別処理の対象にすることはできそうですので、要望があればモグラ叩き可能です。
    • [3337] Re2: .$ 置換(不具合?) もか 2003年12月15日 01:02

      ▼じゅうじさん
      >. には[CR]を含めないのが「ヘルプ」以前の本来の仕様なのだと思います。
      ▼ http://www.perldoc.com/perl5.004_05/pod/perlre.html
      >. Match any character (except newline)
      ...
      > \n newline (LF, NL)
      > \r return (CR)
      参照したバージョンが正しいのか知りませんが、newlineにCRは含まれない。
      すなわち、. にはCRは含まれると読めます。
      any characterはBregexpの仕様により、漢字の2バイト文字も含みます。

      なお、ヘルプにはサクラエディタ側が行っている特殊処理などの正確な記載が出来ていません。
      それ以前に、今ざっと眺めただけでも幾つか変なところが...すみません。近いうちに直します。
      ▼ヘルプ(GFDL)より
      >. \nを除く任意の1文字 [.\n]と同じ
      修正候補
      . \nを除く任意の文字(全角文字にも一致する) [^\n]と同じ