マッチする文字列を後ろから探す。

http://d.hatena.ne.jp/whitypig/20091102/1257187523
with-temp-bufferとre-search-backwardを組み合わせると惜しい結果にはなる。
一文字ずれてしまう。

(defvar str  "This is a foo that is not same as the foo appeared in that sentence written by foo.")

(defun string-match-backward (regexp string &optional start)
  (with-temp-buffer
    (insert string)
    (when start (goto-char start))
    (re-search-backward regexp nil t 1)))

(string-match-backward "foo" str) ; => 80
(string-match-backward "foo" str 79) ; => 39

(when (string-match-backward "foo" str)
  (match-string 0 str)) ; => oo.