Ruby 1.8 regexp:utf字符串中的匹配索引

时间:2010-04-21 09:45:37

标签: ruby regex utf-8

我正在尝试在文本中搜索匹配项并将其返回给它周围的代码段。为此,我想找到与正则表达式匹配,然后使用匹配索引+ - 片段半径(text.mb_chars [start..finish])剪切字符串。

但是,我不能让ruby的(1.8)正则表达式返回匹配索引,这将是多字节感知。

据我所知,正则表达式是1.8中的一个应该是非常清楚的地方,但是尽管/ u切换它似乎不起作用:

"Résumé" =~ /s/u
=> 3

"Resume" =~ /s/u
=> 2

如果regex确实在多字节(/ u)中工作,结果应该是相同的,但它返回字节索引。

如何获得字符匹配索引,而不是字节?

或者可能还有其他一些方法可以获得(每个)匹配的片段吗?

2 个答案:

答案 0 :(得分:0)

不是真正的答案,但评论的时间太长了。

代码

print "Résumé" =~ /s/u
print "\n"
print "Resume" =~ /s/u
Windows上的

(Ruby 1.8.6,版本26)打印:

2
2

在Linux上(ruby 1.8.7(2009-06-12 patchlevel 174)[i486-linux])它打印出来:

3
2

答案 1 :(得分:0)

如何使用我编写的jindex函数,它与jcode库中的其他方法相对应:

class String
  def jslice *args
    split(//)[*args].join rescue ""
  end
  def jindex match, start=0
    if match.is_a? String
      match = Regexp.new(Regexp.escape(match))
    end
    if self.jslice(start..-1) =~ match
      $PREMATCH.jlength + start
    else
      nil
    end
  end
end