2016-07-11 19 views
-1

Ich möchte die id und type der Objekte (z. B. Regionen und Länder), wo available=true. Ich habe den regulären Ausdruck {"name":".+?","id":"(.+?)","type":"(.+?)","available":true verwendet.regulärer Ausdruck, um vollständige Übereinstimmung zu vermeiden

Ich bekomme eine komplette Zeile ab Name ... {andere Sachen in der Mitte} ... available = true, die andere IDs/Namen auch wenn available=false auch enthält.

Beispieldaten unter

{ 
"error":null, 
"data":{ 
    "airports":[], 
    "pocs":[], 
    "regions":[ 
    { 
     "name":"Central America", 
     "id":"L04305", 
     "type":"CruiseArea", 
     "available":false, 
     "countries":"Mexico", 
     "group":null 
    }, 
    { 
     "name":"Caribbean", 
     "id":"L04304", 
     "type":"CruiseArea", 
     "available":false, 
     "countries":"St Maarten,Barbados,British Virgin Islands,St Kitts and Nevis,St Vincent and the Grenadines,Antigua", 
     "group":null 
    }, 
    { 
     "name":"Western Mediterranean", 
     "id":"L34381", 
     "type":"CruiseArea", 
     "available":true, 
     "countries":"Spain", 
     "group":null 
    }, 
    { 
     "name":"Eastern Mediterranean", 
     "id":"L34373", 
     "type":"CruiseArea", 
     "available":false, 
     "countries":"Greece,Italy,Slovenia,Montenegro,Croatia", 
     "group":null 
    }, 
    { 
     "name":"North Africa And Middle East", 
     "id":"L04301", 
     "type":"CruiseArea", 
     "available":false, 
     "countries":"Morocco", 
     "group":null 
    }, 
    { 
     "name":"Fjords, Iceland And Arctic", 
     "id":"L34384", 
     "type":"CruiseArea", 
     "available":true, 
     "countries":"Norway", 
     "group":null 
    }, 
    { 
     "name":"Northern Europe And UK", 
     "id":"L34383", 
     "type":"CruiseArea", 
     "available":true, 
     "countries":"United Kingdom", 
     "group":null 
    } 
    ], 
    "countries":[ 
    { 
     "name":"Spain", 
     "id":"ESP", 
     "type":"COUNTRY", 
     "available":true, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Jamaica", 
     "id":"JAM", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Greece", 
     "id":"GRC", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Italy", 
     "id":"ITA", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Turkey", 
     "id":"TUR", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Barbados", 
     "id":"BRB", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Mexico", 
     "id":"MEX", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Israel", 
     "id":"ISR", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Cuba", 
     "id":"CUB", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    }, 
    { 
     "name":"Croatia", 
     "id":"HRV", 
     "type":"COUNTRY", 
     "available":false, 
     "countries":null, 
     "group":null 
    } 
    ], 
    "itineraries":[], 
    "airportGroups":[] 
    }, 
"nomatch":false, 
"durations":null, 
"searchError":null 
} 
+0

Verwenden '[^"] + 'statt'. +? ' – hjpotter92

+2

eher ein Json-Parser wie https://github.com/stig/json-framework verwenden – hjpotter92

+0

hallo..danke..ich habe was ich wollte mit [^ "] + – shett

Antwort

0

Die einfachste Lösung (ohne insgesamt re-write)

{"name":"[^"]*","id":"([^"]*)","type":"([^"]*)","available":true,[^{}]*} 

für . Statt Scannen könnte - jedes Zeichen aber Newline - für ein beliebiges Zeichen scannen, aber { oder } - [^{}].

See it here at regex101.

+0

kannst du mir bitte erklären wie funktioniert das? – shett

+0

Überprüfen Sie die Erklärung bei regex101. Es ist ziemlich gründlich. – ClasG