我目前正在尝试使用正则表达式来检查我的结构化消息是否有效。
我的模式是
"(Sent: )(\\d{4}/\\d{2}/\\d{2}\\s+(\\d{2}:\\d{2}))( From: )(\\d{6})"
我的留言
"Sent: 2015/01/19 21:36 From: 000001"
似乎我的正则表达式一直返回false。
我的信息是使用"发送:" + now.format(日期)+"来自:" + id,其中 现在是使用格式的Date对象(" yyyy / MM / dd HH:mm")。 id是动态对象。
如果有人能够指出我的错误,我将不胜感激
以下是上述问题的示例代码: SimpleUDPC.java
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
public class SimpleUDPC{
private static String currentDateTime(){
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
Date date = new Date();
return dateFormat.format(date);
}
public static void main(String args[]) throws Exception{
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
String sentence ="Sent: "+currentDateTime()+" From: 000001 Data: 0000";
DatagramPacket sendPacket = new DatagramPacket(sentence.getBytes(), sentence.getBytes().length, IPAddress, 9876);
clientSocket.send(sendPacket);
clientSocket.close();
}
}
SimpleUDPS.java
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
import java.util.regex.*;
public class SimpleUDPS{
private static final String PATTERN = "(Sent: )(\\d{4}/\\d{2}/\\d{2}\\s(\\d{2}:\\d{2}))( From: )(\\d{6})( Data: )(\\d+)";
private static void processReading(String message){
System.out.println(message.matches(PATTERN));
}
public static void main(String args[]) throws Exception{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
while(true){
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
processReading(new String(receivePacket.getData()));
}
}
}
答案 0 :(得分:0)
使用此正则表达式。它正在为我正确地返回结构化消息
(Sent: )(\d{4}\/\d{2}\/\d{2})\s(\d{2}\:\d{2})\s(From: )(\d{6})
答案 1 :(得分:0)
我认为问题出在byte[] receiveData = new byte[1024];
由于我的发送消息可能不需要这么大。
我自己还在努力。
希望这有助于任何仍在努力的人