php sscanf问题

时间:2011-08-15 18:50:54

标签: php string extract scanf

我有这个字符串:

City Lat/Lon: (50.7708) / (6.1053)

我尝试用php中的sscanf以这种方式提取这两个数字:

$result = post_request('http://www.ip-address.org/lookup/ip-locator.php', $post_data);
$start =strpos($result['content'], "City Lat/Lon");
$end = strpos($result['content'], "IP Language");
$sub = substr($result['content'],$start,$end-$start);
sscanf($sub, "City Lat/Lon: (%f) / (6.1053)",$asd);
echo $asd;

但它没有给我任何结果,也没有错误我应该改变什么?

它通过这种方式起作用

sscanf("City Lat/Lon: (50.7708) / (6.1053)", "City Lat/Lon: (%f) / (%f)",$asd,$wer);

3 个答案:

答案 0 :(得分:2)

您似乎正在使用找到的post_request()函数here

如果是这样,您的$sub变量包含在响应中找到的各种HTML标记。例如,如果您尝试:

var_dump($sub) // Outputs: string 'City Lat/Lon:</th><td class='lookup'> (50.7708) / (6.1053)</td></tr><tr><th>' (length=78)

您可以使用正则表达式(如@Headshota所建议的那样)尝试匹配纬度和经度,而不是sscanf。例如,一种可能的解决方案:

//...

preg_match('#\((?<lat>-?[0-9.]+)\) / \((?<lon>-?[0-9.]+)\)#', $sub, $matches);
echo $matches["lat"]; // Outputs 50.7708
echo $matches["lon"]; // Outputs 6.1053

答案 1 :(得分:1)

适合我:

$sub = 'City Lat/Lon: (50.7708) / (6.1053)';
var_dump( sscanf($sub, "City Lat/Lon: (%f) / (6.1053)",$asd), $asd);

...打印:

int(1)
float(50.7708)

错误可以在您的确切测试代码中或其他地方。

答案 2 :(得分:0)

使用正则表达式:

 preg_match_all("/(\([0-9.]+\))/");

这将返回一个包含您的值的数组。