Als je dat stuk "var CatalogData= " d'r af knipt kun je het restant via json_decode() eenvoudig naar een array omzetten (zie ook de 2e parameter van die functie http://www.php.net/json_decode )
Noemen we JSON. JSON staat voor "JavaScript Object Notation". Het is een vrij eenvoudige manier van data uitwisseling die gebruikt wordt tussen (bijvoorbeeld) PHP en javascript, vaak in combinatie met AJAX. Soms wordt JSON ook in PHP gebruikt om een (numerieke/associatieve/multidimensionale) array op te slaan in een bestand. Voordat JSON geïntroduceerd werd maakte men vaak gebruik van XML om data heen en weer te zenden maar na de komst van JSON wordt deze het meest gebruikt omdat de notatie simpel en korter is.
Handig om te weten:
Wat in JSON tussen accolades {} staat is een object, ofwel een associatieve array in PHP termen.
Wat in JSON tussen blokhaken [] staat is een (numerieke) array.
Een simpele array:
["Ford","BMW","Fiat"]
Een Object:
{"name":"Frank","gender":"Male"}
Een object kan echter array's bevatten en je kunt ook een array van objecten hebben of een array in een array etc..
Zit in die $url letterlijk je URL, of de file_get_contents($url)? Dat maakt nogal verschil. Overigens, als de "opmaak" van de data altijd zo is, dan heb je helemaal geen regex nodig:
Dat is dus de source van de pagina, maar de source bevat javascript en html etc.
Ik wil dus die functie die ik in mijn eerste bericht had genoemd filteren en omzetten in php waarden.
Dan zul je even de URL van die pagina door moeten geven, maar als ik zo naar je regex kijk zou ik die $ op het eind d'r uit laten. Het document zal na de punt-komma waarschijnlijk wel niet eindigen. Tevens nog een "s" modifier toevoegen om de punt ook regeleinden te laten matchen.
Ik zie in de regex een escaping die daar niet thuishoort (\\s ipv \s). Verder match je ook de begin-accolade (die je denk ik niet wilt hebben) en wil je een puntkomma matchen die niet in je voorbeeld staat (en volgens mij syntactisch ook niet op die plek mag staan). En, zoals Rob al zei: ook de linebreaks moeten worden gematcht door een punt. Dit zou dus moeten werken:
Er zit nog 1 probleempje in: als het laatste element in je JSON-object ook een object is (zoals "Retailer" in je oorspronkelijke post) dan match je een } te weinig. Aangezien de volgorde van de elementen in principe willekeurig is, kun je die extra } echter ook niet (of in ieder geval niet eenvoudig) in je regex matchen.
$html = file_get_contents($url); //HTML ophalen van URL
if(preg_match('#var CatalogData\\s*=\\s*(.*?});#ms', $html, $matches)){ //JSON uit HTML peuteren
$json = $matches[1]; //JSON zit in group 1 van de match
$data = json_decode($json, true); //JSON string naar assoc.array omzetten
print_r($data);
}
Anders overal even een var_dump tussendoor, en kijken waar het mis gaat.