2016-09-29 3 views
2
{{"name":"alpha", 
"age":"23", 
"sex":male", 
"location":"U.S" 
} 
{"name":"beta", 
"age":"23", 
"sex":male", 
"location":"Cambodia" 
}} 

Wenn ich einen Namen gebe, sollte meine Regex den Ort für diesen Namen zurückgeben. der Name als Variable angegeben Angenommen, dann versuche ich, bekommenRegex-Übereinstimmung nach gegebener Zeichenfolge

"name":"alpha"[\d\D]*"location":"(.+?)" 

ich immer die letzte Position, mit diesem Ausdruck. Wie kann ich den Standort anhand des Namens ermitteln? Irgendeine Hilfe?

+2

Don Verwenden Sie Regex nicht, um Daten aus JSON zu extrahieren. – trincot

+2

Mögliches Duplikat von [Was bedeuten faul und gierig im Zusammenhang mit regulären Ausdrücken?] (Http://stackoverflow.com/questions/2301285/what-do-lazy-and-greedy-mean-in-the-context- von regulären Ausdrücken) – revo

+0

@trincot Was ist, wenn nur Regexes verfügbar sind? Okay, Sie können einen vollständigen JSON-Parser schreiben, aber das ist etwas übertrieben, um eine Zeichenfolge aus einigen JSON-Daten zu extrahieren. – Mecki

Antwort

2

Sie erhalten immer die letzte, weil [\d\D]* alles dazwischen passt und Regexes versuchen immer so viel wie möglich zu entsprechen. Wenn Ihre Regex-Engine kennt nicht gierigen Matches (und es sieht aus wie es funktioniert, weil Sie ein nicht gieriges Spiel an der Stelle verwenden, um dich: +?), sollten Sie in der Lage sein, dies zu verwenden:

"name":"alpha"[\d\D]*?"location":"(.+?)" 
Verwandte Themen