すいません、ちょっと質問を。
BCB6と、boost1.33.1の正規表現ライブラリを利用したプログラムを組んでいます。

struct print_submatch {
    bool operator ()(const boost::match_results<std::string::const_iterator>& m) {
    cout << m.str(0) << endl;
    return true;
    }
};
int main()
{
    // "o"を含む単語にマッチする単語を正規表現で検索
    boost::regex  r( "([a-zA-Z]*).o.([a-zA-Z]*)" );
    string str1 = "A quick brown fox jumps over the lazy dogs.";
    boost::regex_grep( print_submatch(), str1, r );
    return 0;
}
とやると、結果が

brown
fox
jumps over
dogs

となってしまいます。
jumps over ではなく、 over だけ帰ってきてほしいのですが・・・。
boostの[a-zA-Z]*って空白文字にもマッチするバグでもあるんでしょうか?
(\b|[a-zA-Z]*).o.([a-zA-Z]*|\b)とやっても結果は改善されず。
誰か解決法をご存知でしたら、教えてください。