2009-02-25 8 views
0

Quelqu'un peut-il m'expliquer que je ne suis pas familier avec les filtres preg_match_all, ce code fonctionne bien, sauf qu'il ne renvoie pas de valeur négative si l'une des latitudes et des longitudes est négative.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"; 
} 

sortie: Latitude: 30.6963 Longitude: 71.6207 (longitude manque un '-')

Répondre

3

La valeur de la variable coords dépend de ce qui est adapté par le code dans les parenthèses. Déplacement de l'option signe moins (-?) à l'intérieur des parenthèses devrait faire l'affaire:

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

Voir la official documentation pour plus de détails sur les preg en php et php.net/preg_match_all pour les détails de preg_match_all.

+0

pouvez-vous me référer à un lien où je peux comprendre tous les filtres utilisés dans preg_match_all, ineed pour apprendre cela – hitek

+0

http://www.regular-expressions.info –

+0

@unknown (yahoo): Ajout d'un paragraphe sur la documentation – phihag

1

Votre signe n'est pas entre parenthèses. $ coords [1] contient la partie de l'expression rationnelle correspondant à la partie entre (et). Les + - sont avant la parenthèse, cependant, ils ne font donc pas partie de ce qui est apparié et retourné.

Questions connexes