2011-02-20 9 views
2

私はCでrobots.txtのパーサを書いてい++いただきました!私のCと間違っ++正規表現マッチ

boost::regex exrp("^User-agent:\s*(.*)"); 

       boost:: match_results<string::const_iterator> what; 

        if(boost::regex_search(robots, what, exrp)) 

        { 

         string s(what[1].first, what[1].second); 


         cout<< s; 
        } 

これは*名前のユーザーエージェントと一致する必要がありますが、あなたがそれを望むなら、それはそれは、すべての件のデータ

+0

"data"はすでに複数です。 –

答えて

4

C++ 0x生の文字列を使用しない場合は、ダブルバックスラッシュ '\\'が必要です。

2

を返します。試合だけUser-agent: *ない(例えば)あなたは

"^User-agent:\\s*\\*" 

*文字は特別な意味を持つが必要なので、ESでなければなりませんUser-agent: webcrawler\で上限をつけた。コード内の(.*)は、0文字以上の任意の文字と一致し、一致をキャプチャします。

編集:ラバーブーツで指摘したようにあなたはまた、バックスラッシュをエスケープする必要があります。

+0

この場合は "^ User-agent:¥¥s *¥¥¥*"と表示されます。 –

+0

良い点:固定。 –

関連する問題