preg_match_all returns TRUE but bad values
Posted: Mon Nov 22, 2010 5:44 am
hi
i ve a string - this is a javascript variable:
[text]var var0 = [ "11296710","na","21,010,200,000","20101121","20100415","20100209","X","rozne dane","na","koty","12:40 am","00:00","2910416169","Nov. 21, 2010","4.2","kol","4.2700","4.2200","251698248","0.0320","d","4.2500","4.2600","4.3000","4.2600","3.1100","5.0700","Feb. 9, 2010","Apr. 15, 2010","na","na","2.56","-0.02","-172.03","0.00","0","0.744 %","4.2","4.3000","20101119","6712","20101119","4.2600","4.2700","4.2200","0.0000","dane firmowe","na","na" ];[/text]
php code:
First preg_match_all with pattern - /^var var([0-9]){1,2} = \[ (\"(.*?)\",){48}\"(.*?)\" \]\;$/ - returns TRUE but bad values:
[text]Array
(
[0] => Array
(
[0] => var var0 = [ ...... ];
)
[1] => Array
(
[0] => 0
)
[2] => Array
(
[0] => "na",
)
[3] => Array
(
[0] => na
)
[4] => Array
(
[0] => na
)
)[/text]
Second preg_match_all with pattern $patt works fine - returns TRUE and all values between " ".
What is wrong with first pattern ?
thanks
i ve a string - this is a javascript variable:
[text]var var0 = [ "11296710","na","21,010,200,000","20101121","20100415","20100209","X","rozne dane","na","koty","12:40 am","00:00","2910416169","Nov. 21, 2010","4.2","kol","4.2700","4.2200","251698248","0.0320","d","4.2500","4.2600","4.3000","4.2600","3.1100","5.0700","Feb. 9, 2010","Apr. 15, 2010","na","na","2.56","-0.02","-172.03","0.00","0","0.744 %","4.2","4.3000","20101119","6712","20101119","4.2600","4.2700","4.2200","0.0000","dane firmowe","na","na" ];[/text]
php code:
Code: Select all
#
$s = file_get_contents("./var.txt");
$s = trim($s);
$s = explode("\n",$s);
$patt = "/^var var([0-9]){1,2} = \[ "; // Begin of pattern
for($i=0; $i<=47; $i++){ $patt .= "\"(.*?)\","; } // Repeat pattern
$patt .= "\"(.*?)\" \]\;$/"; // The end of pattern
echo $patt;
# 1 . not good
#
preg_match_All("/^var var([0-9]){1,2} = \[ (\"(.*?)\",){48}\"(.*?)\" \]\;$/ ", $s[0], $matches);
# 2 . good
#
preg_match_all($patt, $s[0], $matches1);
echo "<pre>";
var_dump($s);
print_r($matches);
print_r($matches1);
echo "</pre>";
show_source(__FILE__);
#
?>[text]Array
(
[0] => Array
(
[0] => var var0 = [ ...... ];
)
[1] => Array
(
[0] => 0
)
[2] => Array
(
[0] => "na",
)
[3] => Array
(
[0] => na
)
[4] => Array
(
[0] => na
)
)[/text]
Second preg_match_all with pattern $patt works fine - returns TRUE and all values between " ".
What is wrong with first pattern ?
thanks