2015-02-27 4 views
0

Я пинг хоста. В результате получается стандартный вывод. Ниже REGEXP, но это не работает правильно. Где я совершил ошибку?Java Java regexp pattern

String REGEXP ="time=(\\\\d+)ms"; 

     Pattern pattern = Pattern.compile(REGEXP); 
     Matcher matcher = pattern.matcher(result); 
     if (matcher.find()) { 
      result = matcher.group(1); 
     } 
+5

'\\ d +' должно быть достаточно – vks

+1

проблема решена. удалите это сообщение -_- – Baby

+0

@Jonjongot - Я думаю, что OP должен знать * почему? * :) – TheLostMind

ответ

1

Вам нужно только \\d+ в своем регулярном выражении, потому что

Сличитель выглядит для шаблона (с помощью которых она создается), а затем пытается найти все вхождение паттерна в строке подкрепляются.

  1. Используйте while(matcher.group(1) в случае нескольких случаев.
  2. каждый () представляет захваченную группу.
1

У вас слишком много обратных косых черт. Предполагая, что вы хотите, чтобы получить число из строки, как «время = 32 мс», то вам необходимо:

String REGEXP ="time=(\\d+)ms"; 

    Pattern pattern = Pattern.compile(REGEXP); 
    Matcher matcher = pattern.matcher(result); 
    if (matcher.find()) { 
     result = matcher.group(1); 
    } 

Объяснение: шаблон поиска вы ищете «\ d», то есть десятичное число, тем " + "означает 1 или более случаев.

Чтобы получить символ «\», он должен быть экранирован, а escape-символ также «\».

Скобки определяют группу соответствия, которую вы хотите выбрать.

С помощью «\\\\ d +» совпадение видит это как «\\ d +», что соответствует обратному косой чертой, сопровождаемой одним или несколькими «d» s. Первая обратная косая черта защищает вторую обратную косую черту, а третья защищает четвертую.