2010-06-20 5 views
0

Je dois extraire la première URL d'un contenu. Le contenu peut ressembler à ceci:Extraction d'URL à partir d'une chaîne de type JSON

({items:[{url:"http://cincinnati.ebayclassifieds.com/",name:"Cincinnati"},{url:"http://dayton.ebayclassifieds.com/",name:"Dayton"}],error:null}); 

ou peut contenir seulement un lien

({items:[{url:"http://portlandor.ebayclassifieds.com/",name:"Portland (OR)"}],error:null}); 

actuellement je:

$pattern = "/\:\[\{url\:\"(.*)\"\,name/"; 
preg_match_all($pattern, $htmlContent, $matches); 
$URL = $matches[1][0]; 

mais il ne fonctionne que s'il y a un seul lien, donc je besoin d'une regex qui devrait fonctionner pour les deux cas.

Répondre

0

Vous pouvez utiliser ce REGEX:

$pattern = "/url\:\"([^\"]+)\"/"; 

A travaillé pour moi :)

+0

:) ça marche ici aussi – Michael

0

Ça sent le JSON pour moi. Essayez d'utiliser http://php.net/json_decode

+0

ce n'est pas valide JSON donc je préférerais une regex que de corriger le json et le décoder ... trop de tracas. – Michael

+0

pouvez-vous m'aider avec regex? : | – Michael

0

On dirait JSON pour moi, visitez http://php.net/manual/en/book.json.php et utilisez json_decode().

+0

ce n'est pas JSON valide donc je préférerais un regex que de corriger le json et de le décoder ... trop de tracas. – Michael

+1

N'avez-vous aucun contrôle sur le pseudo-JSON généré? –

+0

@Jon Cram Je n'ai pas de contrôle sur le contenu généré .. – Michael

0

Espérons que cela devrait fonctionner pour vous

<?php 
$str = '({items:[{url:"http://cincinnati.ebayclassifieds.com/",name:"Cincinnati"},{url:"http://dayton.ebayclassifieds.com/",name:"Dayton"}],error:null});'; //The string you want to extract the 1st URL from 

$match = ""; //Define the match variable 
preg_match("%(((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&amp;\%\$#\=~_\-]+))*%",$str,$match); //I Googled for the best Regular expression for URLs and found the one included in the preg_match 

echo $match[0]; //Return the first item in the array (the first URL returned) 
?> 

Ceci est le site que je trouve l'expression régulière sur: http://regexlib.com/Search.aspx?k=URL

comme les autres ont dit, json_decode devrait travailler pour vous Aswell

Questions connexes