我目前正在尝试提取以下API调用的值: http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true
结果应该是类似的数组:
$my = array(
'country_name' => 'UNITED STATES',
'country_iso' => 'US',
'city_name' => 'Sugar Grove, IL',
'latitude' => 41.7696,
'longitude' => -88.4588
);
任何人都有一个聪明的正则表达式来实现这一目标吗?
提前致谢!
答案 0 :(得分:4)
$response = file('http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true');
foreach ($response as $line) {
$line = trim($line);
if (!empty($line)) {
$parts = explode(': ', $line);
$array[$parts[0]] = $parts[1];
}
}
print_r($array);
输出:
Array
(
[Country] => UNITED STATES (US)
[City] => Sugar Grove, IL
[Latitude] => 41.7696
[Longitude] => -88.4588
[IP] => 12.215.42.19
)
答案 1 :(得分:2)
Country: (.*?) \((.*?)\)\nCity: ([^\n]*)\n\nLatitude: ([-0-9.]*)\nLongitude: ([-0-9.]*)\n
但最好使用许多正则表达式:
Country: (.*?) \(([^\n]*)\)
City: ([^\n]*)
Latitude: ([-0-9.]*)
Longitude: ([-0-9.]*)
答案 2 :(得分:1)
无法发表评论。
@Dan Grossman - 我的2美分:将FILE_SKIP_EMPTY_LINES
和/或FILE_IGNORE_NEW_LINES
标志添加到file()函数中,这样您就不需要检查空行了。
我会使用非正则表达式版本。