Matchter regex regex java показывает неожиданные результатыJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Matchter regex regex java показывает неожиданные результаты

Сообщение Anonymous »

Я пытался использовать Regex для разбора данных из вывода, собранных стандартной командой Ping. Однако некоторые шаблоны не работают, как и ожидалось, даже после проверки выражения режима в онлайн -контролерах (они отлично работают в браузере). < /P>

Ошибка, которую я получил, была следующей: < /p>

Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:536)
at RegexMatches.parseGroupBytes(RegexMatches.java:77)
at RegexMatches.main(RegexMatches.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Process finished with exit code 1
< /code>

Учитывая, что мне не хватает опыта работы с Regex, я хотел бы знать, как продолжить, чтобы решить проблему. Класс, который я использовал, как ниже: < /p>

public class RegexMatches
{
public static void main( String args[] ){
String input = "[1463895254]PING www.andi.dz (213.179.181.44) 100(128) bytes of data.[1463895254]108 bytes from 213.179.181.44: icmp_seq=1 ttl=54 time=195 ms[1463895255]108 bytes from 213.179.181.44: icmp_seq=2 ttl=54 time=202 ms[1463895256]108 bytes from 213.179.181.44: icmp_seq=3 ttl=54 time=180 ms[1463895257]108 bytes from 213.179.181.44: icmp_seq=4 ttl=54 time=200 ms[1463895258]108 bytes from 213.179.181.44: icmp_seq=5 ttl=54 time=206 ms[1463895259]108 bytes from 213.179.181.44: icmp_seq=6 ttl=54 time=188 ms[1463895260]108 bytes from 213.179.181.44: icmp_seq=7 ttl=54 time=182 ms[1463895261]108 bytes from 213.179.181.44: icmp_seq=8 ttl=54 time=223 ms[1463895263]108 bytes from 213.179.181.44: icmp_seq=9 ttl=54 time=187 ms[1463895263]108 bytes from 213.179.181.44: icmp_seq=10 ttl=54 time=199 ms";
String input2 = "[1463895327]PING www.gov.bw (168.167.134.24) 100(128) bytes of data.[1463895327]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=1 ttl=110 time=868 ms[1463895328]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=2 ttl=110 time=892 ms[1463895329]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=3 ttl=110 time=814 ms[1463895330]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=4 ttl=110 time=1009 ms[1463895331]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=5 ttl=110 time=1006 ms[1463895332]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=6 ttl=110 time=984 ms[1463895333]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=7 ttl=110 time=1004 ms[1463895334]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=8 ttl=110 time=1006 ms[1463895335]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=9 ttl=110 time=1013 ms[1463895336]108 bytes from www.gov.bw (168.167.134.24): icmp_seq=10 ttl=110 time=578 ms[1463895336][1463895336]--- www.gov.bw ping statistics ---[1463895336]10 packets transmitted, 10 received, 0% packet loss, time 9007ms[1463895336]rtt min/avg/max/mdev = 578.263/917.875/1013.707/132.095 ms, pipe 2\n";
// System.out.println(parse1(input));
try{
String op[] = parseGroupBytes(input);
System.out.println(op[0]);
}
catch (Exception e){
e.printStackTrace();
}
}

public static String parse1(String input){
Pattern p =Pattern.compile("\\[([0-9]{10})\\]PING");
Matcher m = p.matcher(input);
if (m.find())
return m.group(1);
else
return "error";
}

// Doesn't Work...
// patterns seem to be correct but only shows the first value

public static String[] parseGroupBytes(String input) throws BytesNotFoundException {
// Capture the bytes after (ip-address) outside the parenthesis
// Capture the bytes after (ip-address) inside the parenthesis
Pattern p1 = Pattern.compile("\\)\\s+(\\d+)\\(");
Matcher m1 = p1.matcher(input);
Pattern p2 = Pattern.compile("\\((\\d+)\\)\\s+bytes");
Matcher m2 = p2.matcher(input);
String[] GroupBytes = new String[2];
int x = m1.groupCount();
int y = m2.groupCount();
if(m1.find() || m2.find()){
GroupBytes[0] = m1.group(1);
GroupBytes[1] = m2.group(1);
return GroupBytes;
}
else
throw new BytesNotFoundException();
}
}


Подробнее здесь: https://stackoverflow.com/questions/384 ... ed-results
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Java: Matchter Matchter неожиданно возвращает новые линии
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Java Regex.pattern Matchter не возвращает желаемые результаты
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Java 21 regex boundary matcher matchter unicode изменение
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Java 21 regex boundary matcher matchter unicode изменение
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Java regex matchter не совпадает
    Anonymous » » в форуме JAVA
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»