2012-04-11 5 views
1

Ich benutze pcrecpp, um Übereinstimmung und Ausdruck in meinem C++ - Programm. Der entsprechende Code ist:Pcrecpp mehrere Zeilen

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

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

Und der Text i entsprechen möge, ist so etwas wie:

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

ich nicht den ganzen Ausdruck zwischen GET und HTTP bieten kann, weil es eine neue Zeile (\ n) ist . Irgendeine Idee?

+0

Es scheint, Sie versuchen, die URL einer HTTP-Anforderung "GET" zu erhalten. Es sollte jedoch keine neue Zeile in der Anforderungszeile geben, wenn Sie der HTTP-Spezifikation folgen, was zu der Annahme führt, dass Sie eine ungültige HTTP-Anfrage haben. –

+0

Nun, ich bekomme eine Menge HTTP-Anfrage von einem Tool namens [ngrep] (http://ngrep.sourceforge.net/). Ich habe gelesen, dass die Ausgabe geändert werden könnte, um breiter zu sein. Ich werde später auschecken. –

Antwort

0

Sie sollten einen Blick auf der Dokumentation nehmen: http://linux.die.net/man/3/pcrecpp

aussehen Vor allem im Abschnitt mit dem Titel „Modifikatoren zu der regulären Expression Engine Passing“.

Sie sind wahrscheinlich an den Optionen PCRE_MULTILINE und PCRE_DOTALL interessiert. Mit der Option DOTALL müssten Sie nicht das OR tun, das Sie tun. "." würde auch Newline-Zeichen entsprechen.

+0

Sieht vielversprechend aus, ich habe es mit 'PCRE_MULTINE' versucht, aber nicht funktioniert. Ich werde es mit 'PCRE_DOTALL' versuchen. –

+0

Ja, PCRE_DOTALL funktioniert gut. Vielen Dank. –