Я пытаюсь захватить координаты ввода, которые могут выглядеть так:
22 ° 50'23,46 "S, 43 ° 0'44,80" W
или это
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);
$ matches остается пустым.
Возможно, вам стоит попытаться игнорировать фактические градусы и отметки и сосредоточиться только на данных, которые вы хотите захватить.
(\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 без пунктуации.)
Вам не хватает модификатора /u
, чтобы заставить интерпретатор модели интерпретировать как Unicode.
Что мешает вам использовать символ °
буквально?
/ (\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
Используйте mb_ereg_match
вместо этого для поддержки символов UTF-8. Документы: http://php.net/manual/en/book.mbstring.php
Инициализировать mb * следующим образом:
mb_regex_encoding('UTF-8'); mb_internal_encoding('UTF-8');