-1

正規表現を使用してドキュメントから値を取得し、それを。という変数に格納します$distance。これは文字列ですが、データベースのテーブルのint列に配置する必要があります。

もちろん、通常私は行って言うでしょう

$distance=intval($distance);

しかし、それは機能しません!理由はよくわかりません。

これが私がしているすべてです:

preg_match_all($regex,$content,$match);
$distance=$match[0][1];
$distance=intval($distance);

正規表現は正しいです。$distanceをエコーすると、たとえば「0」になりますが、「0」ではなく0にする必要があります。intval()を使用すると、どういうわけか常に空の文字列に変換されます。

編集1

正規表現は次のとおりです。

$regex='#<value>(.+?)</value>#'; // Please, I know I shouldn't use regex for parsing XML - but that is not the problem right now

それから私は続行します

preg_match_all($regex,$content,$match);
$distance=$match[0][1];
$distance=intval($distance);
4

3 に答える 3

1

必要print_r($match)な配列は次の$match[1]とおりです。

$content = '<value>1</value>, <value>12</value>';

$regex='#<value>(.+?)</value>#';

preg_match_all($regex,$content,$match);

print_r($match);

出力:

Array
(
    [0] => Array
        (
            [0] => <value>1</value>
            [1] => <value>12</value>
        )

    [1] => Array
        (
            [0] => 1
            [1] => 12
        )

)

この場合:

$distance = (int) $match[1][1];

var_dump($distance);

出力:int(12)


または、フラグを使用することもできますPREG_SET_ORDER。つまりpreg_match_all($regex,$content,$match,$flags=PREG_SET_ORDER);、$match配列の構造は次のとおりです。

Array
(
    [0] => Array
        (
            [0] => <value>1</value>
            [1] => 1
        )

    [1] => Array
        (
            [0] => <value>12</value>
            [1] => 12
        )

)
于 2012-08-20T17:15:50.383 に答える
1

ゼロの前にスペースがあるか、場合によっては(そこにある場合は)0xA0バイトが必要です。必ず数字を取得するには、正規表現で「\d」を使用してください。

編集:値をクリーンアップできます

$value = (int)trim($value, " \t\r\n\x0B\xA0\x00");

http://php.net/manual/en/function.trim.php

于 2012-08-20T17:10:49.087 に答える
0

正規表現に疑問符が必要なのはなぜですか?これを試して:

$regex='#<value>(.+)</value>#';
于 2012-08-20T17:13:48.270 に答える