2013-05-13 4 views
1

Я создаю программу для чтения пакета из 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")); 

Любые предложения? Благодаря!

ответ

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.

+0

спасибо! – user130349

0

При использовании Matcher#matches, соответствует полному String иначе выражению if утверждения будет оценивать ложь и номер не будет извлечен возвращением -1 каждый раз. Кроме того, второй Pattern можно полностью исключить, используя capturing group, чтобы извлечь номер из ввода 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; 
}