所以我试图从一行看起来像这样的数据:
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 :(得分: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;东西