2012-04-11 5 views
1

私はpcrecppを使って私のC++プログラムで式を一致させています。Pcrecpp複数の行

pcrecpp::RE("GET (\n*|.*)* HTTP").PartialMatch(packet, &getUrl); 

cout << "GET " << getUrl << endl; 

と私が一致するテキストのようなものです:関連するコードは、改行(\ n)がありますので、私はGETHTTP間の全体の表現に一致することはできません

GET /subscribe?host_int=52830395&ns_map=39290872_6081712982008&ts=133411801 
3 HTTP ... 

。何か案が?

+0

HTTP 'GET'リクエストのURLを取得しようとしているようです。しかし、HTTP仕様に従えば、要求ラインに改行があってはいけません。これはあなたに無効なHTTPリクエストがあると思うようになります。 –

+0

さて、私は[ngrep](http://ngrep.sourceforge.net/)というツールからたくさんのHTTPリクエストを取得しています。私はアウトプットがより広くなるように変更できることを読んだ。私は後でチェックアウトします。 –

答えて

0

あなたはドキュメントを見てみる必要があります:http://linux.die.net/man/3/pcrecpp

は、最も顕著なのは、「正規表現エンジンに修飾子を渡す」というタイトルのセクションを見てください。

おそらく、PCRE_MULTILINEとPCRE_DOTALLオプションの使用に興味があります。 DOTALLオプションを使用すると、実行しているORを実行する必要はありません。 ""改行文字にも一致します。

+0

有望に見えますが、私は 'PCRE_MULTINE'で試しましたが、うまくいきませんでした。 'PCRE_DOTALL'で試してみます。 –

+0

はい、PCRE_DOTALLは素晴らしい動作します。ありがとう。 –