Regex.Replace("HogeFugaPiyoHogera", "([a-z])([A-Z])", "$1-$2")

上記の置換を行うと、結果は

Hoge-Fuga-Piyo-Hogera

となります。

場合によっては有用な置換方法だと思いますが、
どのような原理でこのような結果になるのか理解できません。

わかりやすく説明して頂けないでしょうか?