Как получить фильтр по идентификатору с помощью регулярных выражений? - PullRequest
0 голосов
/ 20 января 2019

У меня есть текст

{
"item":
{
  id = 1,
  something
  value="value1"
  something
}
"item":
{
  value="value2"
  something
  id = 2,
  something
}
"item":
{
  id = 3,
  something
  value="value3"
  something
}
}

Я хочу получить значение по идентификатору

Я пытался

(value=.*)[\w\W]*?id = 2

, но он получает значение = "value1"

https://regex101.com/r/xraGIQ/1

1 Ответ

0 голосов
/ 20 января 2019

(?:(id = \d+)[^{}]*?(value="[^"\r\n]*")|(value="[^"\r\n]*")[^{}]*?(id = \d+))

будет соответствовать всем парам id / значение

Объяснение:

(?:
    (id = \d+)              # group 1, id
    [^{}]*?                 # 0 or more any character but curly braces
    (value="[^"\r\n]*")     # group 2, value
  |                         # OR
    (value="[^"\r\n]*")     # group 3, value
    [^{}]*?                 # 0 or more any character but curly braces
    (id = \d+)              # group 4, id
)

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...