前田です。

At Tue, 22 Jun 1999 22:05:18 +0900,
YANAGAWA Kazuhisa <kjana / os.xaxon.ne.jp> wrote:
>     p "oofoo".rindex "f"    #=> 2
>     p "oofoo".rindex "f", 1 #=> 2
>     p "oofoo".rindex "f", 3 #=> nil
> 
> なもので.rindex の二番目が nil,三番目が 2 となる,「新たにオブジェク
> トを生成しないで,さらに ruby レベルでループを回さない」うまい方法はな
> いかと思ったわけです.

「新たにオブジェクトを生成しない」というのはちょっと苦しいですけ
ど、こんなのはいかがでしょう。

def strrstr(str, pat, start=str.length)
  n = str.length - start
  re = Regexp.new(format("%s(?=.*.{%d}$)", Regexp.quote(pat), n))
  m = re.match(str)
  return m && m.begin(0)
end

p strrstr("oofoo", "f")
p strrstr("oofoo", "f", 1)
p strrstr("oofoo", "f", 3)

ちょっと遅いかな。

-- 
前田 修吾