извлечь длинный / лат из строки - PullRequest
0 голосов
/ 15 августа 2010

HI

У меня есть строка, которая может содержать долготу и широту. Строка может содержать что угодно, но если она содержит lon / lat, то я хочу извлечь ее с помощью php. Я думаю, что мне нужно регулярное выражение, но я понятия не имею, как это сделать. Строка может содержать все, что угодно:

случайная строка dfdff33338983 33.707352, -116.272797 больше dfdfndfdf

Ответы [ 2 ]

4 голосов
/ 15 августа 2010

Если строка может содержать что-нибудь , то существует нет регулярного выражения или действительно любой фрагмент кода, который может извлечь долготу и широту.

Этоможно подтвердить следующей строкой:

7.123456,40.404040 is nothing like 33.707352,-116.272797 or 99.111222,-22.333444.

Какой из этих значений является широтой?

Вы можете попробовать что-то вроде:

\b-?\d+\.\d{6},-?\d+\.\d{6}\b

в качестве отправной точки.

2 голосов
/ 15 августа 2010

Вы можете соответствовать, используя это:

.*\s(.*),(.*?)\s.*

См. Этот ответ в Рубуляр .

Ответ в php:

$txt = "dfdff333 38983 33.707352,-116.272797 dfd fndfdf";
$lat = preg_replace("/.*\s(.*),.*?\s.*/", "$1", $txt);
$lon = preg_replace("/.*\s.*,(.*?)\s.*/", "$1", $txt);

echo $lat."\n"; // 33.707352
echo $lon."\n"; // -116.272797

ПримечаниеЯ использую запятую в качестве разделителя.


РЕДАКТИРОВАТЬ: вы можете использовать более конкретное регулярное выражение, например

$lat = preg_replace("/.*\s(-?\d+\.\d+),-?\d+\.\d+?\s.*/", "$1", $txt);
$lon = preg_replace("/.*\s-?\d+\.\d+,(-?\d+\.\d+?)\s.*/", "$1", $txt);

Tks @soapbox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...