MatchData.begin(n)总是在jruby上返回0

时间:2012-07-05 09:26:02

标签: ruby regex jruby

我刚刚在jruby上跑步时发现了。当文本中有中文/日文时,MatchData.begin()将始终返回0。

我使用以下ruby脚本进行了测试:

# encoding: utf-8
text = 'i love dog @chichi dog dog'
text_cn = '我爱你狗狗 @chichi 狗狗'
text_jp = '私はあなたの犬を愛して @chichi ドッグ'
reg = /([@@])([a-zA-Z0-9_]{1,20})(.*)/o

puts "==== Text in English ===="
text.scan(reg) do |before, at, screen_name, list_slug|
  puts $~.inspect

  puts "1. #{$~.begin(1)}"
  puts "2. #{$~.begin(2)}"
  puts "3. #{$~.begin(3)}"
end

puts "==== Text in Chinese ===="
text_cn.scan(reg) do |before, at, screen_name, list_slug|
  puts $~.inspect

  puts "1. #{$~.begin(1)}"
  puts "2. #{$~.begin(2)}"
  puts "3. #{$~.begin(3)}"
end

puts "==== Text in Japanese ===="
text_jp.scan(reg) do |before, at, screen_name, list_slug|
  puts $~.inspect

  puts "1. #{$~.begin(1)}"
  puts "2. #{$~.begin(2)}"
  puts "3. #{$~.begin(3)}"
end

jruby-1.6.7.2的结果:

$ jruby -S test.rb
==== Text in English ====
#<MatchData "@chichi dog dog" 1:"@" 2:"chichi" 3:" dog dog">
1. 11
2. 12
3. 18
==== Text in Chinese ====
#<MatchData "@chichi 狗狗" 1:"@" 2:"chichi" 3:" 狗狗">
1. 0
2. 0
3. 0
==== Text in Japanese ====
#<MatchData "@chichi ドッグ" 1:"@" 2:"chichi" 3:" ドッグ">
1. 0
2. 0
3. 0

如果我用ruby-1.9.2-p290运行它,一切都是正确的,我不确定是否有一些我需要用jruby做的设置我错过了?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

刚刚与jruby irc中的人谈过,1.7.0修正了这个问题。

1.7.0.preview11.7.0.prevew2

都是正确的