views:

131

answers:

3

Could some one explain this to me i am not familiar with preg_match_all filters, this code works fine except it does not return a negative value if one of the latitudes and longitudes is negative.

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 (longitude is missing a '-')

+2  A: 

The value of the coords variable depends on what is matched by the code inside the parentheses. Moving the optional minus sign (-?) inside the parentheses should do the trick:

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

See the official documentation for details about preg in php and php.net/preg_match_all for the details of preg_match_all.

phihag
can you refer me to a link where i can understand all the filters used in preg_match_all, ineed to learn this
http://www.regular-expressions.info
gms8994
@unknown (yahoo): Added a paragraph about documentation
phihag
A: 

"-?" should be included into the parentheses

amartynov
+1  A: 

Your sign is not in the parenthesis. $coords[1] contains the part of the regex that matched the part between ( and ). The +- are before the parenthesis, though, thus they are not part of what is matched and returned.

Mecki