Techioz Blog

#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、またはその両方に対してバグを報告する必要があります。