原です。

正規表現が空にマッチする時、最長条件が守られていないように
見えます。

print "abc".sub(/b?|b/){ "(#$&)" }, "\n"  # => (a)bc
print "abc".sub(/c?|b/){ "(#$&)" }, "\n"  # => ()abc

b?|b の表す文字集合より c?|b の表す文字集合の方が大きいのに前者
の方が、マッチする文字列が長い。

でもこれはなかなか微妙な仕様なのかもしれません。
---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=--
                           Shin-ichro Hara(Nagaoka Univ.of Tech.)