координаты preg_match со знаком степени - PullRequest
1 голос
/ 18 марта 2011

Я пытаюсь захватить координаты входа, который может выглядеть следующим образом

22 ° 50'23.46 "ю.ш., 43 ° 0'44.80" ш

или это

41 ° 12'27.84 "N, 16 ° 18'40.15" E

Я думаю, что проблема заключается в символах степени в моем паттерне. Мой текущий код:

$found = preg_match("~(\d+\p{Sm}\d+\s*\'\s*\d+\s*\.\s*\d+\s*\"\s*[N|S])\s*,\s*(\d+\s*\p{Sm}\s*\d+\s*\'\s*\d+\s*\.\s*\d+\s*\"\s*[E|W])~i", $_POST['submission']['url'], $matches);

$ совпадений остается пустым.

Ответы [ 4 ]

1 голос
/ 18 марта 2011

Что мешает вам буквально использовать символ °?

/
  (\d+\s*°\s*  \d+\s*'\s*  \d+\s*\.\s*\d+\s*"\s*  [NS])
  \s*,\s*
  (\d+\s*°\s*  \d+\s*'\s*  \d+\s*\.\s*\d+\s*"\s*  [EW])
/xi
1 голос
/ 18 марта 2011

Вам не хватает модификатора /u, чтобы заставить механизм интерпретировать шаблон как Unicode.

0 голосов
/ 18 марта 2011

Возможно, вам следует попытаться игнорировать фактические градусы и отметки и сфокусироваться только на данных, которые вы хотите получить.

(\d+)\D+(\d+)\D+(\d+)\.(\d+)\W(\w+)\W+(\d+)\D+(\d+)\D+(\d+)\.(\d+)\W(\w)

Это регулярное выражение должно содержать следующие данные:

41
12
27
84
N
16
18
40
15
E

(Edit2: исправлено, чтобы правильно подобрать N без знаков препинания.)

0 голосов
/ 18 марта 2011

Используйте mb_ereg_match вместо поддержки символов UTF-8.Документы: http://php.net/manual/en/book.mbstring.php

Инициализировать mb * так:

mb_regex_encoding('UTF-8');
mb_internal_encoding('UTF-8');
...