0

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";
}

出力: Latitude: 30.6963 Longitude: 71.6207 (経度に「-」がありません)

4

3 に答える 3

3

変数の値はcoords、括弧内のコードによって一致するものによって異なります。オプションのマイナス記号 ( -?) を括弧内に移動すると、うまくいくはずです。

if ( preg_match_all( "#<td>\s+(-?\d+\.\d+)\s+</td>#", $output, $coords ) ) {

php の preg の詳細については公式ドキュメントを、 の詳細についてはphp.net/preg_match_allを参照してくださいpreg_match_all

于 2009-02-25T15:44:13.507 に答える
1

あなたのサインは括弧内にありません。$coords[1] には、( と ) の間の部分に一致した正規表現の部分が含まれます。ただし、+- は括弧の前にあるため、一致して返されるものの一部ではありません。

于 2009-02-25T15:45:38.277 に答える