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