2017-04-30 29 views
0

我有這個數據PHP的谷歌地圖的正則表達式的preg_match

var companies = [{"name":"Beliaa","lat":"30.043438999999999","lng":"31.239159999999998","infowindow":{"title":"Beliaa","address":"28 El Falaky St., Bab El Louk, Downtown, Cairo"}}]; 
translator.add("Rated Successfully", "Rated Successfully"); 
translator.add("Reviewed Successfully", "Your review has been submitted and will be published as soon as possible. Thanks for sharing!"); 

我想

緯度:30.043438999999999 和 LNG:31.239159999999998

用的preg_match

+0

這看起來不像PHP代碼。 –

+0

其js代碼 我想解析PHP代碼中的JS代碼 –

+0

所以我的答案將符合您的需求。您也可以輕鬆調整線條以提取經度。 –

回答

1

如果您嘗試在PHP中解析JS代碼

$subject = <<<'__EOS__' 
var companies = [{"name":"Beliaa","lat":"30.043438999999999","lng":"31.239159999999998","infowindow":{"title":"Beliaa","address":"28 El Falaky St., Bab El Louk, Downtown, Cairo"}}]; 
translator.add("Rated Successfully", "Rated Successfully"); 
translator.add("Reviewed Successfully", "Your review has been submitted and will be published as soon as possible. Thanks for sharing!"); 
__EOS__; 


if(preg_match('/"lat":"(.*?)"/', $subject, $matches)) 
    echo "lat:{$matches[1]}"; 
else 
    echo 'not found'; 

既然你的源代碼字符串是一個非常簡單的代碼片段,你也可以保持你的正則表達式簡單。被搜索的字符串被文字"lat":"包圍... "。圓括號定義了在$matches[1]中捕獲的子模式(.*?)。點意味着「任何字符」,星號是一個意思是0或更多次的量詞,問號使得量化表達式不確定,所以它停在該表達式後面的下一個匹配模式(本例中的引號)。否則,你會得到整個字符串,直到sharing!"(找到最後的引號)。

0

Quasimodo的答案會起作用,但它可以更好。 以下方法使用更快的正則表達式模式,並消除(浪費)使用捕獲組的需要。

一個班輪方法:

list($lat,$lng)=preg_match_all('/"l(?:at|ng)":"\K[\d\.]+/',$in,$out)?$out[0]:['','']; 
echo "lat:$lat<br>"; 
echo "lng:$lng"; 

輸出:

lat:30.043438999999999 
lng:31.239159999999998 

在正則表達式模式將存儲在 「fullstring」 子陣列所需值\K。這種技術減少了陣列膨脹50%。這部分:l(?:at|ng)將有效匹配latlng。而這個:[\d\.]+將匹配你需要的整個十進制子串。

list()將分配匹配的值到即用型變量;現在您可以根據需要使用這些變量。