1

我正在创建一个程序来从 TCPdump 读取数据包,并读取序列号。我正在使用正则表达式,但我的代码不起作用。

public long getsequencenumber(String Packet){
    Pattern P = Pattern.compile("seq.\\d*"); 
    Matcher m = P.matcher(Packet);
    if(m.matches()){
        Pattern num = Pattern.compile("\\d*");
        return Long.getLong(num.matcher(m.group()).group());
    }
    return -1;
}

以下打印 -1:

System.out.print(getsequencenumber("BlahBdds seq 1910428391283 ldskgj"));

有什么建议么?谢谢!

4

2 回答 2

0

使用时Matcher#matches,匹配完整,String否则if语句表达式将评估为false,并且不会-1每次都提取返回的数字。此外,第二个Pattern可以通过使用捕获组从输入中提取数字来完全消除String

public long getSequenceNumber(String packet){
    Matcher m = Pattern.compile(".*seq.(\\d+).*").matcher(packet);
    if (m.matches()) {
        return Long.parseLong(m.group(1));
    }

    return -1;
}
于 2013-05-13T01:31:08.060 回答
0

你需要的是matcher.find()Long.valueOf()

public class Main {
    public static void main(String[] args) {
        System.out.println(getsequencenumber("Bladds seq 1910428391283 ldskgj"));
    }

    public static long getsequencenumber(String Packet){
        Pattern P = Pattern.compile("seq.(\\d*)"); 
        Matcher m = P.matcher(Packet);
        if(m.find()){
            return Long.valueOf(m.group(1));
        }
        return -1;
    }
}

输出:

1910428391283

在此处查看演示

于 2013-05-13T01:44:02.960 回答