我正在寫一個java服務器,並總是從瀏覽器讀取請求。例如,我在瀏覽器http://localhost:8080/great
及正如我在程序中的下一個步驟,我需要得到GET和HTTP/1.1之間的文本讀起來就像新行匹配器「不匹配」
GET /great HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47
Accept-Encoding: gzip, deflate, lzma, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
這一請求。所以,在這種情況下/great
我嘗試使用匹配器。但它說沒有匹配。誰能解釋爲什麼?
下面是一個代碼:
public void run() {
try {
while(true) {
in = new BufferedReader(new InputStreamReader(serSock.getInputStream(), Charset.forName("UTF-8")));
StringBuilder request = new StringBuilder();
request = new StringBuilder();
String inputLine;
while (!(inputLine = in.readLine()).equals("")) {
request.append(inputLine + "\r\n");
}
Pattern pattern = Pattern.compile("(?s)GET(.*)HTTP/1.1:*[\\n\\r].*", Pattern.MULTILINE);
Matcher matcher = pattern.matcher(request);
System.out.println(request);
String rev= matcher.group(1);
System.out.println(rev);
}
}
catch (IOException e) {
System.out.println(e);
}
}
}
我認爲這個問題是模式。
我猜你並不是想把':*'放在你的模式中。您的示例請求與任何有效的HTTP請求一樣,在HTTP/1.1之後沒有冒號。 – VGR
我個人可能會對此調用'readLine()',然後使用'.split(「」)'來獲得動詞和URI。模式匹配對於這些微不足道的東西來說是過分的。 – markspace