From: Ken Takata Date: 2011-08-23T00:33:58+09:00 Subject: [ruby-dev:44410] [Ruby 1.9 - Bug #5208] \b and \B don't match properly Issue #5208 has been updated by Ken Takata. > Ruby では \w とは別に \p{Word} というものを用意しているので、「\b は \p{Word} に従う」でよいかと思っています。 そういう考えもありましたか。ただ、少なくともPerl 5.14とPython 2.7では、 \b, \B は \w, \W と同期しており、(?u) などに応じて動作が変わります。(\p{Word}は固定) それ以外の言語ではどうなっているか確認できていません。 > (?(cond)yes|no) とかも欲しいなぁと思っていたのと、最適化も欲しいので、 > いっそ高田さんが Ruby の正規表現エンジンをメンテしてくださるとうれしいなぁと思っていたり。 自分の改造版鬼車(鬼雲)をRubyに取り込んでいただく分には何の問題もないのですが、 Rubyの正規表現エンジン自体をメンテするのは手に負えそうにないです。 (特に、Rubyで独自に変更している部分をどうすべきかが課題。) なお、Onigmo 5.10.6では以下のような機能が追加されています。 ・正規表現  - \K, \R, \X, (?(cond)yes|no), \g<0>, \g<+n>, (?au)  - Perl 5.10互換の名前参照(←Rubyには不要でしょう。) ・Shift_JIS, EUC-JPで、全角アルファベットなどの大文字小文字同一視検索に対応。 ・Shift_JIS, EUC-JPで、\p{Han}, \p{Latin}, \p{Greek}, \p{Cyrillic} に対応。 ・最適化  - 暗黙のアンカーによる最適化を実装。  - http://redmine.ruby-lang.org/issues/3568 で無効化された最適化を再度有効化。 ・Perl 5.14に比べた制限  - (?(cond)yes|no) の条件に、先読み・戻り読み等が使えない。  - (?|...), \o{nnn} 等は未対応。 ---------------------------------------- Bug #5208: \b and \B don't match properly http://redmine.ruby-lang.org/issues/5208 Author: Ken Takata Status: Assigned Priority: Normal Assignee: Yui NARUSE Category: Target version: ruby -v: ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-mswin32] 初めまして、高田と申します。 \b, \Bが正しく単語境界、非単語境界にマッチしていません。 ruby 1.9.2では、\wがマルチバイト文字にマッチしないように鬼車を修正していたと思いますが、 \b, \Bについては\w, \Wに対応するように修正されていないようです。 実行例: C:\>type x.rb #! ruby -Ks p /\B/ =~ "あいうabc" p $' p /\b/ =~ "あいうabc" p $' C:\>ruby x.rb 1 "いうabc" 0 "あいうabc" 期待する結果: C:\>ruby x.rb 0 "あいうabc" 3 "abc" なお、私が公開している鬼車の改造版では、Perl 5.14に合わせて(?au)で\w等の マルチバイト文字へのマッチを制御できるようにしています。 https://github.com/k-takata/Onigmo -- http://redmine.ruby-lang.org