2016-11-11 1 views
0

Ich versuche, Ihre in einem String kommt den Header der HTTP-Anforderung oder nicht zu erkennen, denn das ich festzustellen, wenn zwei Zeilenumbrüche (nach Norm):Ich kann nicht trennen den HTTP-Body-Header

String bufferRequest = socketServer.getBufferPart(); 

Pattern regexHTTP = Pattern.compile("((.+\\n)+\\n)"); 
Matcher regexMatcherHTTP = regexHTTP.matcher(bufferRequest); 

if (regexMatcherHTTP.find()) { 
    String requestHeader = regexMatcherHTTP.group(1); 
    // ... 

Der Anforderungspuffer Beispiel:

GET/HTTP/1.1 
abc: def 
ghi: jkl 

body part 1 ... 

body part 2 ... 

body etc ... 

von „GET /“ erhalten müssen „jkl“, aber er mich nicht erkennt, was habe ich falsch gemacht ?.

In regexr.com funktioniert: http://regexr.com/3ekjm

+2

Können Sie nicht jede Zeile lesen, bis Sie die erste leere erhalten? –

+0

Ich würde für jede Zeile eine tun müssen, wenn der Benutzer viele Headerzeilen sendet der CPU-Prozess könnte höher sein als mit dem regulären Ausdruck, sonst ist es weniger elegant hahaha. –

+0

ist es irreführend zu denken, dass das Lesen vieler Headerzeilen in einer for-Schleife zu einer höheren CPU-Auslastung führt. Wenn überhaupt, könnte das Regex-Parsen etwas kostspieliger sein, aber für den Fall sollten Sie sich keine Gedanken über die Leistung machen, es sei denn, bis Sie einen Engpass bemerken, den Sie durch [Profilerstellung] feststellen können (http://docs.oracle.com/javase/8/ docs/technotes/guides/visualvm/profiler.html). – asgs

Antwort

1

Meine Lösung:

Pattern regexHTTP = Pattern.compile("((.+(\\r\\n|\\n))+(\\r\\n|\\n))"); 
+0

Ihre Anforderungen ändern sich, gut, Sie haben es herausgefunden, + 1, weiter so –

0

Ich glaube, Sie DOTALL Flagge verwenden müssen, wie auch ich modifizierte regex ein bisschen.

Try this:

Pattern regexHTTP = Pattern.compile("((.+?)([\\r]?\\n){2}).*", Pattern.DOTALL); 

habe ich '([\\ r] \\ n?)', Weil in Linux/Unix-Zeilenende nur '\ n' ist, während in Windows ist es ‚\ r \ n '. Also ich bin nicht klar, was Sie in echten Nachrichten haben werden.

Verwandte Themen