我正在开发Twitter应用程序。在解析JSON时,我需要提取纬度和经度,将它们存储在数据库中,然后在Android应用程序中使用它们。基本上,我设法提取它,但人们从不同的设备(iPhone,黑莓等)发送他们的推文。我得到了不同的回应。以下是示例:
ÜT: 51.554644,-0.003976
51.576100, -0.031600
Iphone: 51.554644,-0.003976
现在我的问题是:如何使用正则表达式来匹配纬度和经度,并在JavaScript中以数组的形式提取它,而不管它前面出现的单词是什么?
答案 0 :(得分:9)
您可以使用以下内容:
([0-9.-]+).+?([0-9.-]+)
由于您使用PHP和JavaScript标记了您的问题,我将向您展示如何在两者中使用它。
在PHP中:
preg_match('/([0-9.-]+).+?([0-9.-]+)/', $str, $matches);
$lat=(float)$matches[1];
$long=(float)$matches[2];
// coords are in $lat and $long
在JavaScript中:
var matches=str.match(/([0-9.-]+).+?([0-9.-]+)/);
var lat=parseFloat(matches[1]);
var long=parseFloat(matches[2]);
// coords are in lat and long
为了好玩,这里也是Python:
import re
match = re.match(r'([0-9.-]+).+?([0-9.-]+)', str)
lat = float(match.group(1))
long = float(match.group(2))
# coords are in lat and long
答案 1 :(得分:1)
我希望这会起作用
$output= 'ÜT: 51.554644,-0.003976';
function makePerfect($x)
{
return preg_replace('/[^-?0-9\.]/','', $x);
}
$lenLong=explode(',',$output);
$final=array_map('makePerfect',$lenLong);
//debug like this
echo "<pre>";
print_r($final);
显示
Array
(
[0] => 51.554644
[1] => -0.003976
)
答案 2 :(得分:1)
这适用于您指定的所有字符串:
$str = "Iphone: 51.554644,-0.003976";
preg_match_all("/(?<lat>[-+]?([0-9]+\.[0-9]+)).*(?<long>[-+]?([0-9]+\.[0-9]+))/", $str, $matches);
$lat = $matches['lat'];
$long = $matches['long'];
var_dump($lat, $long);
答案 3 :(得分:0)
在javascript中 -
var t1 = "ÜT: 51.554644,-0.003976";
var t2 = "51.576100, -0.031600";
var t3 = "Iphone: 51.554644,-0.003976";
var reg = new RegExp(/[+-]?[\d.]+/g);
console.log(t1.match(reg));
console.log(t2.match(reg));
console.log(t3.match(reg));
答案 4 :(得分:0)
格式:纬度,经度
用python测试:
(?<![0-9\.])((-?[0-8]?[0-9](\.\d*)?)|(-?90(\.[0]*)?))[\ ]*,[\ ]*((-?([1]?[0-7][0-9]|[1-9]?[0-9])(\.\d*)?)|-?180(\.[0]*)?)(?![0-9\.])