[英]preg_match_all
有人可以向我解釋一下嗎?我不熟悉 preg_match_all 過濾器,此代碼工作正常,但如果緯度和經度之一為負數,它不會返回負值。
if ( preg_match_all( "#<td>\s+-?(\d+\.\d+)\s+</td>#", $output, $coords ) ) {
list( $lat, $long ) = $coords[1];
echo "Latitude: $lat\nLongitude: $long\n";
}
output: Latitude: 30.6963 Longitude: 71.6207
(經度缺少“-”)
coords
變量的值取決於括號內的代碼匹配的內容。 移動括號內的可選減號( -?
)應該可以解決問題:
if ( preg_match_all( "#<td>\s+(-?\d+\.\d+)\s+</td>#", $output, $coords ) ) {
有關 preg 的詳細信息,請參見官方文檔php 和php.net/preg_match_all的preg_match_all
詳細信息。
您的符號不在括號中。 $coords[1] 包含與 ( 和 ) 之間的部分匹配的正則表達式部分。 但是,+- 在括號之前,因此它們不是匹配和返回的內容的一部分。
如果你不喜歡preg_match()
API,你可以使用T-Regx 工具——它真的很酷
$p = "<td>\s+(-?\d+\.\d+)\s+</td>"; // no delimiters :)
pattern($p)->match($output)->forEach(function (Match $match) {
$match->text();
// or
$match->group(1)->text();
// or check if it's matched
$match->group(1)->matched();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.