一种很好的方法,可以在Ruby中找到所有出现的正则表达式子串的起始位置

时间:2014-03-18 10:37:04

标签: ruby regex string

我们说我有这个字符串:

bar="hello kohello hello"

我想要一个函数foo,我给它

foo(bar,"hello")

得到:

[0,8,14]

现在,我可以做(很多选项中的一个):

def foo(str1,substr)
  i= -1
  substr_length = substr.length()
  str1.chars.map{ | char |
    i+=1
    str1(i,substr_length) == substr ? i : nil
  }.select{ |x| x }
end

还有更像“Ruby like”的东西吗?还有Regexp,而不是字符串 感谢。

1 个答案:

答案 0 :(得分:0)

irb

arr = []
bar.scan("hello"){arr.push($~.offset(0)[0])}

现在检查arr

[0,8,14]

添加我的游戏机'代码清晰

1.9.3-p362 :008 > arr = []
 => [] 
1.9.3-p362 :009 > bar.scan("hello"){arr.push($~.offset(0)[0])}
 => "hello kohello hello" 
1.9.3-p362 :010 > arr
 => [0, 8, 14] 

对于那些不知道这个神秘的红宝石全局变量的人。

$~包含上一次成功模式匹配中的MatchData。 所以它类似于Regexp.last_match

为了找到索引,我们可以找到Regexp.last_match.offset(0)[0]