开发者

preg_match coordinates with degree sign

开发者 https://www.devze.com 2023-02-17 22:25 出处:网络
I am tryin开发者_如何学编程g to capture the coordinates of an input that could look like this

I am tryin开发者_如何学编程g to capture the coordinates of an input that could look like this

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

or this

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

I think the problem is the degree symbols in my pattern. My current code:

$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 stays empty.


You're missing the /u modifier to make the engine interpret the pattern as Unicode.


What is stopping you from using the ° character literally?

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


Perhaps you should try ignoring the actual degrees and tick marks and focus just on the data you want to grab.

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

This regex should capture the following data:

41
12
27
84
N
16
18
40
15
E

(Edit2: Corrected to properly pick up the N without punctuation.)


Use mb_ereg_match instead to support UTF-8 chars. Docs: http://php.net/manual/en/book.mbstring.php

Initialize mb* like this:

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

精彩评论

暂无评论...
验证码 换一张
取 消