PHP PCRE синтаксический анализ кода JavaScript - PullRequest
2 голосов
/ 15 декабря 2010

Я пытаюсь проанализировать код javascript, который генерирует карту, чтобы я мог получить координаты, которые он использует (первые 2 длинных значения в следующем примере).

Пример:

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

Я использую следующую функцию:

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

Пока что безуспешно.Есть предложения?

1 Ответ

2 голосов
/ 15 декабря 2010

Попробуйте регулярное выражение примерно так:

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

Мой PHP немного заржавел, так что YMMV.Ваше выражение для сопоставления числа с плавающей запятой гораздо более запутанное, чем должно быть, достаточно простого «необязательного знака, за которым следуют несколько цифр, после которых следует десятичная точка, а затем еще несколько цифр»:

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

И не забудьте пропустить $matches[2] и $matches[4], они будут содержать внутренние группы захвата (например, ".20093137 ..." и ".6318891 ..." в вашем примере).

И не беспокойтесь о preg_replace() для таких вещей, вы просто ищете вещи, вы не пытаетесь ничего изменить.Вы можете использовать preg_replace(), но тогда вам придется снова анализировать значение после замены, чтобы получить две части.

...