2016-08-04 82 views
1

所以我想從一條線,像這樣得到的數據:正則表達式返回一個布爾值不是一個字符串

GET /something HTTP/1.1 

現在,我在這裏是我的代碼以正則表達式:

final ServerSocket server = new ServerSocket(8081); 
    System.out.println("Listening on port 8081..."); 
    while (true) { 
     final Socket clientSocket = server.accept(); 

     InputStreamReader isr = new InputStreamReader(clientSocket.getInputStream()); 
     BufferedReader reader = new BufferedReader(isr); 

     String line = reader.readLine(); 

     Pattern pattern = Pattern.compile("GET \\/(.*?) HTTP"); 
     Matcher m = pattern.matcher(line); 

     System.out.println(m.find()); 

「/ something」是我需要得到的東西,它在實際使用中總會有所不同。代碼總是輸出「true」,而不是字符串中的內容。我究竟做錯了什麼?

+0

發現返回一個布爾值,因此你得到它。 – Geek

+0

https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html – 4castle

回答

2

你需要去1個更進一步使用group API從您的正則表達式得到捕獲的設定值。


注:group不會從0位置開始的第一個元素就是你輸入值。你需要從位置開始1

例子:

private void doIt3() { 
    String line = "GET /something HTTP/1.1 "; 
    Pattern pattern = Pattern.compile("GET \\/(.*?) HTTP"); 
    Matcher m = pattern.matcher(line); 

    if (m.find()) { 
     System.out.println("Found value => " + m.group(1)); 
    } 
} 

輸出:

找到值=>東西

2

find方法Matcher類有望返回一個boolean值不匹配的字符串。

你可以看到documentation如下:

公共布爾find()方法:嘗試查找與該模式匹配的 輸入序列的下一個子。

您可以使用以下代碼片段查找所有匹配的模式。

Matcher m = Pattern.compile("GET \\/(.*?) HTTP").matcher(line); 

while (m.find()) { 
    System.out.println(m.group()); 
} 
4

您必須使用Group方法來獲取mathing值。

發現只有告訴你,如果該字符串mathches:

Pattern pattern = Pattern.compile("GET \\/(.*?) HTTP"); 
Matcher m = pattern.matcher(line); 
if (m.find()) 
    System.out.println(m.group(0)); 
相關問題