Я пытаюсь создать регулярное выражение для соответствия координат широты и долготы. Для сопоставления числа с двойной точностью я использовал (\-?\d+(\.\d+)?)
и попытался объединить это в одно выражение:
^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$
Я ожидал, что это будет совпадать с двойным, запятой, возможно, некоторым пробелом и другим двойным, но, похоже, это не сработает. В частности, это работает только если нет места, а не один или несколько. Что я сделал не так?
Это будет строго соответствовать значениям широты и долготы, которые попадают в правильный диапазон:
Спички
Не соответствует
источник
?:
синтаксис группы без захвата, а также полярность захвата(^[-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?)),\s*([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?))$
Я использую эти (десятичный формат, с 6 десятичными цифрами):
широта
долгота
Вот суть, которая проверяет оба, о которых здесь сообщается, на легкость доступа. Это тест Java TestNG. Вам нужны Slf4j, Hamcrest и Lombok для запуска:
источник
На самом деле Аликс Аксель, вышеприведенное регулярное выражение неверно по широте, долготе колеблется с точки зрения.
Диапазон измерений широты от –90 ° до + 90 ° Диапазон измерений широты от –180 ° до + 180 °
Таким образом, приведенное ниже регулярное выражение проверяет более точно.
Кроме того, согласно моей мысли, никто не должен ограничивать десятичную точку по широте / долготе.
ИЛИ для Цели С
источник
99
наLatitude
, в то время как99
находится вне диапазона-90, +90
и поэтому недействителен.Распределение регулярных выражений:
-?
# принимать отрицательные значения^
# Начало строки[0-9]{1,3}
# Совпадение 1-3 цифр (т.е. 0-999)(?:
# Попробуй соответствовать ...\.
# десятичная точка[0-9]{1,10}
# с последующими цифрами от 1 до 10 (т. е. 0-9999999999))?
# ...необязательно$
# Конец строкиисточник
Попробуй это:
Проверьте это на:
http://regexpal.com/
Вставьте выражение в верхнее поле, затем поместите такие вещи в нижнее поле:
Распределение регулярных выражений:
Теперь, что это НЕ делает, ограничивается этим диапазоном:
Вместо этого он просто ограничивается этим диапазоном:
Но главное - это просто разбить каждый фрагмент выражения.
источник
Вот более строгая версия:
-90
-+90
-180
-+180
источник
Python:
Широта:
result = re.match("^[+-]?((90\.?0*$)|(([0-8]?[0-9])\.?[0-9]*$))", '-90.00001')
Долгота:
result = re.match("^[+-]?((180\.?0*$)|(((1[0-7][0-9])|([0-9]{0,2}))\.?[0-9]*$))", '-0.0000')
Широта должна потерпеть неудачу в примере.
источник
@ macro-ferrari Я нашел способ сократить его, и не заглядывая вперед, в свете всех недавних разговоров о двигателях регулярных выражений
источник
Я полагаю, что вы используете \ w (символ слова) там, где вы должны использовать \ s (пробел). Символы слова, как правило, состоят из [A-Za-z0-9_], что исключает ваш пробел, который в дальнейшем не совпадает с дополнительным знаком минус или цифрой.
источник
Это будет работать для такого формата: 31 ͦ 37,4 'E
источник
Рубин
Долгота -179,999999999,10
Широта -89,999999999,90
источник
Полный и простой метод в задаче C для проверки правильности схемы широты и долготы:
где искомая строка - это ввод, который пользователь вводит в соответствующее текстовое поле.
источник
PHP
Вот версия PHP (входные значения:
$latitude
и$longitude
):источник
Вы можете попробовать это:
источник
Попробуй это:
источник
Попробуй это:
источник