最後にmatchするものだけを置き換えたい場合です。
最後にmatchするものは解釈によって異なります。
text = "むふふうふふふ"
こちらで「ふふ」を置き換えしたい場合、末尾の「ふふ」のmatchする部分を前方にするのか、最後尾にするのかで異なります。
パターンによって方法が異なるので、分けて説明します。
前方にmatchする方法
reverseを用いる方法
text = "foobarbazfoobarbazfoobarbaz"
text.reverse.sub("foo".reverse, 'FOO'.reverse).reverse
=> "foobarbazfoobarbazFOObarbaz"
否定先読みを用いる方法
text = "foobarbazfoobarbazfoobarbaz"
text.sub(/foo(?!.*foo)/m, 'Foo')
=> "foobarbazfoobarbazFOObarbaz"
最後尾にmatchする方法
(.*)を用いる方法
text = "foobarbazfoobarbazfoobarbaz"
text.sub(/(.*)foo/m, '\1Foo')
=> "foobarbazfoobarbazFOObarbaz"
text = "むふふうふふふ"
text.sub(/(.*)ふふ/m, '\1*')
=> "むふふうふ*"
結構マニアックな使い方だと思います。
他にやり方があれば、教えて下さい
kanpou_さん、scivolaさん、ありがとうございます!