preg_match координаты со знаком степени

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

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');