Попробуйте регулярное выражение примерно так:
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()
, но тогда вам придется снова анализировать значение после замены, чтобы получить две части.