1 件の投稿を表示中 (合計 5 個)
  • 作成者
    投稿
  • #22966

    開発お疲れ様です。
    EmEditor x64 v16.1.3を使ってて不具合らしきものがあります。

    7bitASCII文字で表現できない文字を検索するため、正規表現を使用するにチェックを付けた状態で、
    [\x{0080}-\x{ffff}]
    というパターンで検索すると、
    Boost.Regex では、期待した動作になりますが、
    Onigmo だと、K(U+004B) S(U+0053) k(U+006B) s(U+0073) にもヒットしてしまうようです。

    では確認お願いします。

    #22967
    redakt55
    参加者

    興味深いですね。
    「大文字と小文字を区別する」が ON だとこの現象は起こらないようです。

    なお,非 ASCII 文字の検出は \P{ASCII} でできます。
    [\x{0080}-\x{ffff}] だと基本多言語面(BMP)外の文字にマッチしません。

    #22968
    redakt55
    参加者

    理由が分かりました。

    結論から言えば,case insensitive(大文字・小文字を区別しない)における Onigmo の動作の仕様といっていいと思います。

    Ruby などで実験しても同じです。

    case insensitive のとき,U+017F LATIN SMALL LETTER LONG S という文字が「s」や「S」にマッチします。
    この文字はラテン文字の小文字の普通のエス「s」のいわば異体字で,日本語でも「ロングエス」と言います。音価なども同じ。対応する大文字は普通の「S」です。
    写本や初期の活版印刷で使われていました。

    試しに検索ダイアログに \x{014F} を入れて,大文字・小文字を区別しない,で検索してみてください。「s」や「S」にマッチしますね。

    [\x{0080}-\x{FFFF}] の範囲にこのロングエスが含まれているために,「s」「S」にマッチしたんですね。

    一方,U+212A KELVIN SIGN という記号があります。これは温度のケルビン記号なのですが,既存コードとの互換性のために用意された文字であり,ふつうはケルビンの記号にはこれでなく普通のラテン文字の「K」を使うことが推奨されています。

    これも,case insensitive の場合はふつうの「k」「K」にマッチするんですね。

    #22969
    Yutaka Emura
    キーマスター

    redakt55 様

    いつもお世話になっております。江村です。

    調べていただき、ありがとうございました。
    参考になりました。

    #22970

    詳細な解説、ありがとうございました。

1 件の投稿を表示中 (合計 5 個)
  • このトピックに返信するにはログインしてください。