为什么这个正则表达式在 #ruby 中工作正常,却在 #jruby 中不起作用?

问题描述 投票:0回答:3

为什么这个正则表达式在 #ruby 中工作正常,却在 #jruby 中不起作用?

<Symbol>: /^[\p{Symbol}]+$/

错误“字符属性名称无效”

ruby regex jruby
3个回答
4
投票

JRuby 使用 Joni

Regexp
,这是 YARV
Rubinius
使用的 Onigmo Regexp 的手写逐行 C 到 Java 端口。

其实,故事并没有那么简单。

首先,有一个名为

Oniguruma
Regexp 图书馆。然后将该库导入到 YARV 源代码树中,从而有效地分叉。 YARV 开发人员向他们自己的分支添加了功能,其中一些被合并回 Oniguruma 本身,一些则没有。 Oniguruma 开发人员添加了功能,其中一些已合并到 YARV 分支中,有些则没有。

在那段时间的某个时刻,JRuby 开发人员放弃了在 Java 正则表达式之上支持 Ruby 语义的尝试,而是将 Oniguruma 从 C 逐行转换为 Java。由此产生的库称为 Joni。当然,Oniguruma 及其 YARV 分支仍在继续开发,Joni 开发人员必须尝试并跟踪该开发。

快进几年,Oniguruma 的另一个分支被创建,称为 Onigmo,它分支了 Oniguruma 的最新版本,并添加了 YARV 开发人员添加的许多功能。 YARV 开发者抛弃了他们自己的 Oniguruma 分支,转而导入他们自己的 Onigmo 分支。

乔尼必须努力跟上这一切。

简而言之:这可能是一个错误:有时,在某个地方,某些东西丢失了,翻译错误了,或者只是简单的错误。它发生了。

您应该针对 JRuby 或 Joni 或两者都提交错误。


0
投票

只是快速补充一下,因为 Jorg 拼写得很好......

因为 Onigmo 除了作为 CRuby 的一部分之外并不真正存在,因此请针对 JRuby 提交您的问题 (http://bugs.jruby.org)。将问题演示为 JRuby bug 会更容易。我们将在 JRuby(对于与 CRuby 中的非 Onigmo 代码对应的代码)或 JCodings(对于属于 Onigmo 的代码)中修复它。


0
投票

现在可以了:)

stackoverflow-34864702.rb

#<Symbol>: /^[\p{Symbol}]+$/
re = /^[\p{Symbol}]+$/
p re.to_s
$ ruby -v stackoverflow-34864702.rb
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin22]
"(?-mix:^[\\p{Symbol}]+$)"

$ jruby -v stackoverflow-34864702.rb
jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 21.0.1+12-LTS on 21.0.1+12-LTS +jit [x86_64-darwin]
"(?-mix:^[\\p{Symbol}]+$)"
© www.soinside.com 2019 - 2024. All rights reserved.