正则表达式返回布尔值而不是字符串

时间:2016-08-04 05:56:42

标签: java regex

所以我试图从一行看起来像这样的数据:

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"而不是字符串中的内容。我究竟做错了什么?

3 个答案:

答案 0 :(得分:4)

您必须使用Group方法获取mathing值。

find只告诉你字符串算法:

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

答案 1 :(得分:2)

find类中的

Matcher方法应返回boolean值不匹配的字符串。

您可以按以下方式查看documentation

  

public boolean find():尝试查找下一个子序列   与模式匹配的输入序列。

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

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

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

答案 2 :(得分:2)

您需要更进一步,使用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));
    }
}

<强>输出:

  

找到值=&gt;东西