我正在创建一个从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"));
有什么建议吗?谢谢!
答案 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。