2010-12-15 74 views
2

J'essaye d'analyser un code javascript qui génère une carte, afin que je puisse obtenir les coordonnées qu'il utilise (les 2 premières valeurs longues dans l'exemple suivant).PHP PCRE parse javascript code

L'exemple:

new OpenLayers.LonLat(-9.2009313718432200, 38.6318891148480000), 9); 

La fonction que je utilise est comme suit:

preg_replace('/LonLat\(([0-9 ,\-\.^\)]{0,})\)/i', '$1', $coords); 

sans succès obtenu jusqu'à présent. Aucune suggestion?

Répondre

2

Essayez une chose regex comme ceci:

preg_match('/LonLat\(([+-]?\d+(\.\d+)),\s*([+-]?\d+(\.\d+))/', $coords, $matches); 
$longitude = $matches[1]; 
$latitude = $matches[3]; 

Mon PHP est un peu rouillé si YMMV. Votre expression pour faire correspondre un nombre à virgule flottante est beaucoup plus alambiquée qu'il doit être, juste un simple « signe optionnel suivi par quelques chiffres suivis d'un point décimal suivi par quelques chiffres supplémentaires » suffit:

[+-]?\d+(\.\d+) 

Et n'oubliez pas de sauter $matches[2] et $matches[4], ceux-ci contiendront les groupes de capture internes (ie ".20093137 ..." et ".6318891 ..." dans votre exemple).

Et ne vous embêtez pas avec preg_replace() pour des choses comme ça, vous êtes juste à la recherche de choses, vous n'essayez pas de changer quoi que ce soit. Vous pouvez utiliser preg_replace(), mais vous devrez alors analyser à nouveau la valeur post-remplacement pour extraire les deux pièces.

+0

Parfait! Juste une note, les touches "1" et "3" des matchs sont les bonnes, pas comme vous l'avez mentionné, au moins dans ma version de PHP. Merci beaucoup, Shiva vous bénisse et joyeux noël :) – yoda

+0

@yoda: Merci, vous avez raison sur les indices donc je les ai fixés: http://php.net/manual/fr/function.preg-match. php, mon PHP est plutôt rouillé. –