2010-06-20 9 views
0

Мне нужно извлечь первый URL из некоторого контента. Содержание может быть таким:Извлечение URL-адресов из строки типа JSON

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

или может содержать только ссылку

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

В настоящее время у меня есть:

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

однако она работает только тогда, когда есть одно звено, так что я нужно регулярное выражение, которое должно работать для обоих случаев.

ответ

0

Вы можете использовать этот REGEX:

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

Работал для меня :)

+0

:) он тоже работает здесь – Michael

0

Это пахнет как JSON для меня. Попробуйте использовать http://php.net/json_decode

+0

это неправда JSON, поэтому я бы предпочел регулярное выражение, чем исправить json и расшифровать его ... слишком много хлопот. – Michael

+0

Вы можете помочь мне с регулярным выражением? : | – Michael

0

Похож на JSON для меня, посетите http://php.net/manual/en/book.json.php и используйте json_decode().

+0

Недействительно JSON, поэтому я бы предпочел регулярное выражение, чем исправить json и расшифровать его ... слишком много хлопот. – Michael

+1

У вас нет никакого контроля над сгенерированным псевдо-JSON? –

+0

@Jon Cram У меня нет контроля над созданным контентом. – Michael

0

Надеется, что это должно работать для вас

<?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) 
?> 

Это сайт, который я нашел регулярное выражение: http://regexlib.com/Search.aspx?k=URL

как другие сказал, json_decode должны работать для вас Aswell

Смежные вопросы