TCPdump使用正则表达式解析序列号

时间:2013-05-13 01:26:18

标签: java regex networking tcpdump

我正在创建一个从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"));

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:0)

使用Matcher#matches时,请匹配完整的String,否则if语句表达式将评估为false,并且每次返回-1时都不会提取该数字。此外,使用capturing group从输入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;
}

答案 1 :(得分: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

请参阅demo here