2013-05-20 1 views
2

Я хочу получить значение поля id в строке ниже, где значение поля inuse равно 1.Невозможно получить правильный вывод с помощью шаблона шаблона

  "version": "IPv6", 
       "primarywins": null, 
       "id": 3, 
       "updated": 1368803376681, 
       "description": null, 
       "inuse": 0, 
       "alias": "Shared MGMT" 
      }, 
      { 
       "computernameprefix": null, 
       "protocol": "static", 
       "version": "IPv4", 
       "primarywins": null, 
       "id": 5, 
       "updated": 1368912314856, 
       "description": null, 
       "inuse": 1 

Я пытаюсь ниже кода Java

String regex = "\"id\": ([0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]),\n.*,\n.*,\n.*\"inuse\": 1"; 
Pattern index_pattern2 = Pattern.compile(regex,Pattern.DOTALL); 
Matcher cMatcher2 = index_pattern2.matcher(The string mentioned above); 
    if(cMatcher2 != null && cMatcher2.find() 
     { 
     ipGrp = cMatcher2.group(1); 
     } 

Значение ipGrp из приведенного выше кода всегда 3, в то время как я хотел бы получить значение как 5 Любое предложение о том, как я могу получить значение правильного идентификатора поля, когда значение используется в 1

+11

Похоже на JSON. Почему бы не использовать библиотеку JSON? –

ответ

0

Используйте это регулярное выражение вместо:

"id": ([0-9]{1,4})[^}]*"inuse": 1 

Сбежал:

"\"id\": ([0-9]{1,4})[^}]*\"inuse\": 1" 

Что я здесь делаю?

  1. Изменение [0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9] в [0-9]{1,4}, что означает, что должно быть в пределах от 1 до 4 [0-9].
  2. Изменить ,\n.*,\n.*,\n.* на [^}]*, что означает любые символы, кроме }.
+0

Большое спасибо, этот ответ помог. – user2401538

0

Попробуйте это.

(?s)"id":\s?(\d+),+.*?(?:"inuse":\s)(\d) 

Он фиксирует как неактивные, так и активные, но вы можете отфильтровать результаты. (? s) вызывает "." для захвата новых строк. Первая группа захвата захватывает идентификатор. 0:

 Смежные вопросы

  • Нет связанных вопросов^_^