我正在尝试在文本中搜索匹配项并将其返回给它周围的代码段。为此,我想找到与正则表达式匹配,然后使用匹配索引+ - 片段半径(text.mb_chars [start..finish])剪切字符串。
但是,我不能让ruby的(1.8)正则表达式返回匹配索引,这将是多字节感知。
据我所知,正则表达式是1.8中的一个应该是非常清楚的地方,但是尽管/ u切换它似乎不起作用:
"Résumé" =~ /s/u
=> 3
"Resume" =~ /s/u
=> 2
如果regex确实在多字节(/ u)中工作,结果应该是相同的,但它返回字节索引。
如何获得字符匹配索引,而不是字节?
或者可能还有其他一些方法可以获得(每个)匹配的片段吗?
答案 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