2016-08-04 181 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)); 
相关问题