preg_match coordinate con segno di laurea

Sto cercando di catturare le coordinate di un input che potrebbe apparire come questo

22 ° 50'23.46 "S, 43 ° 0'44.80" W

o questo

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

Penso che il problema siano i simboli di laurea nel mio schema. Il mio codice attuale:

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

$ partite rimane vuoto.

Forse dovresti provare a ignorare i gradi e i segni di graduazione effettivi e concentrarti solo sui dati che vuoi catturare.

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

Questo regex dovrebbe acquisire i seguenti dati:

 41 12 27 84 N 16 18 40 15 E 

(Modifica2: corretto per raccogliere correttamente la N senza punteggiatura).

Manca il modificatore /u per far sì che il motore interpreti il ​​pattern come Unicode.

Cosa ti impedisce di usare il ° carattere letteralmente?

 / (\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 

Utilizzare mb_ereg_match per supportre i caratteri UTF-8. Documenti: http://php.net/manual/en/book.mbstring.php

Inizializza mb * come questo:

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