簡體   English   中英

preg_match_all

[英]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_allpreg_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM