2010-06-20 69 views
0

我需要從某些內容中提取第一個網址。內容可能是這樣的:從類似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 2010-06-20 16:05:46

0

這聽起來像JSON給我。嘗試使用http://php.net/json_decode

+0

它是無效的JSON,所以我寧願正則表達式比糾正json和解碼它...太多的麻煩。 – Michael 2010-06-20 14:36:50

+0

你能幫我用正則表達式嗎? :| – Michael 2010-06-20 14:43:10

0

看起來像JSON,訪問http://php.net/manual/en/book.json.php並使用json_decode()

+0

它不是有效的JSON,所以我更喜歡正則表達式,而不是糾正JSON並將其解碼......太麻煩了。 – Michael 2010-06-20 14:34:19

+1

你沒有任何控制生成的僞JSON? – 2010-06-20 14:50:58

+0

@Jon Cram我無法控制生成的內容.. – Michael 2010-06-20 15:07:17

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應該爲你工作藏漢