2012-03-16 8 views
0

次の例はチュートリアルのものです。 私はそれを実行すると例外をスローしてからコアダンプします。 私はcatch()を使って次のようなコアダンプを避けるために例外をキャッチしようとしています:boost :: regex_match(text、e)から例外をキャッチしようとすると、コアダンプが発生するのはなぜですか?

しかし動作しません。助言がありますか?

おかげ

-Todd

----コアダンプメッセージが

'ブースト:: exception_detail :: clone_impl>' のインスタンスを投げた後に呼び出さTERMINATE --- BEGIN

what():繰り返し演算子「」は正規表現を開始できません。正規表現の解析中にエラーが発生しました: '>>>ここ>>>'。

アボート(コアダンプ)

---- END ---

---プログラムBEGIN ----

#include <boost/regex.hpp> 
#include <iostream> 
    void print_captures(const std::string& regx, const std::string& text) 

    { 

    boost::regex e(regx); 

    boost::smatch what; 

    std::cout << "Expression: \"" << regx << "\"\n"; 

    std::cout << "Text:  \"" << text << "\"\n"; 

    try { 

    //  boost::regex_match(text, what, e, boost::match_extra); 

    boost::regex_match(text, e); 

    } 

    **catch(boost::regex_error& e) { 

std::cout <<"!!!!\n"; 

    } 

    catch (...) { 

    std::cout << "###\n"; 

    }** 



} 


int main(int , char* []) 

{ 
    print_captures("*", "AAA"); 

} 

---- END -

答えて

1

例外をスローするのはboost::regex()のコンストラクタです。

boost::regex e(regx); 

tryブロックの中に入れてください。それはboost::regex_error&例外ハンドラによって捕捉されます。

関連する問題