#ruby では正常に動作するのに、#jruby ではこの正規表現が動作しないのはなぜですか?
概要
#ruby では正常に動作するのに、#jruby ではこの正規表現が動作しないのはなぜですか?
<Symbol>: /^[\p{Symbol}]+$/
エラー「文字プロパティ名が無効です」
解決策
JRuby は Joni Regexp ライブラリを使用します。これは、YARV と Rubinius で使用される Onigmo Regexp ライブラリの C から Java への 1 行ずつ手書きの移植版です。
実際、話はそれほど単純ではありません。
まず、Oniguruma という Regexp ライブラリがありました。次に、このライブラリは YARV ソースツリーにインポートされ、事実上フォークされました。 YARV 開発者は独自のフォークに機能を追加しましたが、その一部は Oniguruma 自体にマージされ、一部はマージされませんでした。 Oniguruma 開発者は機能を追加しましたが、その一部は YARV フォークにマージされ、一部はマージされませんでした。
その期間のある時点で、JRuby 開発者は Java 正規表現上で Ruby セマンティクスをサポートすることを諦め、Oniguruma を C から Java に 1 行ずつ変換しました。作成されたライブラリは Joni と呼ばれます。もちろん、Oniguruma とその YARV フォークは引き続き開発されており、Joni 開発者はその開発を追跡する必要があります。
数年が経ち、Onigmo と呼ばれる Oniguruma の別のフォークが作成されました。これは、Oniguruma の最新バージョンをフォークし、YARV 開発者によって追加された機能の多くを追加します。 YARV 開発者は、Oniguruma の独自のフォークを捨て、代わりに Onigmo の独自のフォークをインポートします。
そして、ジョニはそのすべてに追いつくように努めなければなりません。
要するに、それはおそらくバグです。いつか、どこかで、何かが失われたか、誤訳されているか、あるいは単にバグがあるだけです。それは起こります。
JRuby または Joni、またはその両方に対してバグを報告する必要があります。