我有一个指向我想要获取文本的网页的链接。例如,页面包含以下行:
<span property="v:latitude" content="-31.941283"></span><span property="v:longitude" content="115.85838"></span>
我需要从那里得到-31.941283和115.85838。在PHP中使用它的最佳和最方便的方法是什么?
到目前为止,我有这样的事情:
public function _getLocationFromSite($pSiteHTML){
if ( !$pSiteHTML ){
return FALSE;
}
if (!preg_match('/(<span property="v:latitude" content="[^"]+">)/', $pSiteHTML, $matchelat)) {
return FALSE;
}
if (!preg_match('/(<span property="v:longitude" content="[^"]+">)/', $pSiteHTML, $matchelon)) {
return FALSE;
}
$location['lat'] = (float)( $matchelat);
$location['lon'] = (float)($matchelon);
return $location;
}
它不起作用......任何想法?
答案 0 :(得分:2)
正则表达式是正确的,但你的捕获是错误的。
function _getLocationFromSite($pSiteHTML){
if ( !$pSiteHTML ){
return FALSE;
}
if (!preg_match('/<span property="v:latitude" content="([^"]+)">/', $pSiteHTML, $matchelat)) {
return FALSE;
}
if (!preg_match('/<span property="v:longitude" content="([^"]+)">/', $pSiteHTML, $matchelon)) {
return FALSE;
}
$location['lat'] = (float)($matchelat[1]);
$location['lon'] = (float)($matchelon[1]);
return $location;
}
还有改进的余地,即可以进一步减少代码。这是一个例子:
<?php
function _getLocationFromSite($html) {
preg_match_all('/<span property="v:(.*?)" content="(.*?)">/', $html, $matches);
return array_combine($matches[1], $matches[2]);
}
var_dump(_getLocationFromSite(null));
var_dump(_getLocationFromSite(''));
var_dump(_getLocationFromSite('<span property="v:latitude" content="-31.941283"></span><span property="v:longitude" content="115.85838"></span>'));
?>
结果如下:
array(0) {
}
array(0) {
}
array(2) {
["latitude"]=>
string(10) "-31.941283"
["longitude"]=>
string(9) "115.85838"
}