- 作成者投稿
- 2016年8月19日 1:40 pm #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) にもヒットしてしまうようです。では確認お願いします。
2016年8月19日 2:11 pm #22967redakt55参加者興味深いですね。
「大文字と小文字を区別する」が ON だとこの現象は起こらないようです。なお,非 ASCII 文字の検出は \P{ASCII} でできます。
[\x{0080}-\x{ffff}] だと基本多言語面(BMP)外の文字にマッチしません。2016年8月19日 5:57 pm #22968redakt55参加者理由が分かりました。
結論から言えば,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」にマッチするんですね。
2016年8月20日 12:42 am #22969Yutaka Emuraキーマスターredakt55 様
いつもお世話になっております。江村です。
調べていただき、ありがとうございました。
参考になりました。2016年8月20日 5:40 pm #22970星くず彼方に参加者詳細な解説、ありがとうございました。
- 作成者投稿
- このトピックに返信するにはログインしてください。