Mam odpowiedź JSON, którą chcę analizować za pomocą wyrażeń regularnych zawierających tablicę obiektów takich jak
...
{
"Id":"01",
"Subject":"Sub",
....
"Status":"Completed"
...
},
{
"Id":"02",
"Subject":"Sub",
....
"Status":"Waiting"
...
}
i chcę uzyskać identyfikator obiektu, który oczekuje na status.
Kiedy analizuję "Id": "(.+?)",[sS]+?"Subject": "Sub",[sS]+?"Status": "Waiting";
pasuje od „Waiting” do pierwszego „Id” (wstecz); na pewno chcę Id obiektu, który czeka.
Jakaś pomoc?
Odpowiedzi:
1 dla odpowiedzi № 1Spróbuj tego:
{s*"Id":"(d+)"[^}]+"Status":"Waiting"s*}
0 dla odpowiedzi nr 2
Spróbuj tego:
(?s)"Id":s*"([^"]+)[^}]*?"Status":s*"Waiting"
Będzie działać, jeśli nie ma zagnieżdżonego {} między właściwościami Id i Status.
0 dla odpowiedzi № 3
Jeśli możesz użyć parsera Json, użyj tego.
Działa to tak długo, jak długo nie ma zagnieżdżonych nawiasów.
{[^{}]*Id":"(d+)[^{}]*s"Status":"Waiting"
Zobacz to tutaj na Regexr
Twoja ekspresja
"Id": "(.+?)",[sS]+?"Subject": "Sub",[sS]+?"Status": "Waiting"
^^^^^^^^
fails here
Ta część pasuje do wszystkiego od pierwszego "Sub",
dopóki nie znajdzie pierwszego "Status": "Waiting"