PCRE RegEx, когда после «status» что-то отличается от «OK» - PullRequest
0 голосов
/ 08 октября 2019

Это мои конечные точки здоровья с JSON:

{
  "JMS Server": {
    "message": "Successfully connected to JMS Server",
    "status": "OK"
  },
  "Database": {
    "message": "Database was successfully reached in 1ms",
    "status": "OK"
  },
  "Application": {
    "message": "IO Error Connection refused (Connection refused)",
    "status": "CRITICAL",
    "info": "URL = http://localhost/testing/healthcheck"
  }
}

и

{
  "JMS Server": {
    "message": "Successfully connected to JMS Server",
    "status": "OK"
  },
  "Database": {
    "message": "JDBC Connection failure",
    "status": "CRITICAL",
    "info": "No operations allowed after connection closed."
  },
  "Application": {
    "message": "Application is up",
    "status": "OK",
    "info": "Application name = Testing"
  }
}

Мне нужен PCRE RegEx, когда после "status" что-то отличается от "OK". Я не уверен, что там всегда написано "КРИТИЧЕСКИЙ".

Я ищу с DuckDuckGo не оператор, но он никогда не работал с Regexr

1 Ответ

2 голосов
/ 09 октября 2019

@ Ян аргумент действителен. JSON никогда не должен анализироваться с использованием регулярных выражений. Но мы могли бы увидеть это требование в качестве исключения, если бы нам не пришлось иметь дело с более сложным синтаксисом (а не с тем же самым, большим количеством внутренних объектов, массивов, различных скалярных типов и т. Д.) И гораздо большей областью включения символов.

Если вы уверены во всех этих предварительных условиях, то следующее регулярное выражение будет соответствовать паре ключ / значение, которая удовлетворяет вашим требованиям:

(?m)^[^{}]*{\s*(?>"(?!status": "OK)[^{}"]++)+}

См. живая демонстрация здесь

...