从类似JSON的字符串中提取URL

时间:2010-06-20 14:29:02

标签: php regex

我需要从某些内容中提取第一个网址。内容可能是这样的:

({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];

但是只有在有一个链接的情况下才有效,所以我需要一个适用于这两种情况的正则表达式。

4 个答案:

答案 0 :(得分: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应该对你有用

答案 1 :(得分:0)

您可以使用此REGEX:

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

为我工作:)

答案 2 :(得分:-1)

对我来说闻起来像JSON。尝试使用http://php.net/json_decode

答案 3 :(得分:-1)

向我看来是JSON,访问http://php.net/manual/en/book.json.php并使用json_decode()