关于Java中正则表达式的问题

时间:2015-01-19 13:47:50

标签: java regex

我目前正在尝试使用正则表达式来检查我的结构化消息是否有效。

我的模式是

"(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()));
        }
    }
}

2 个答案:

答案 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];

之内

由于我的发送消息可能不需要这么大。

我自己还在努力。

希望这有助于任何仍在努力的人