Дано: есть географическая координата, представленная строкой, которая может быть записана в нескольких различных видах. Это 1. градусы минуты секунды.десятичные (ddd mm ss.ss) 2. градусы минуты.десятичные (ddd mm.mmmm) 3. градусы.десятичные (ddd.dddd) 4. всё остальное, не попадающее под предыдущее, не обрабатывать. Совместно с пробелом разделителем может быть ещё символ, то есть разделителями являются 1-2 нецифровых знака. Дробная часть необязательна, сами значения занимают 1-3 знака (градусы), 1-2 знака (целая часть минт и секунд) и от 0 знаков дробная часть. После последних величин также может быть несколько ненужных нецифровых символов. Мне надо привести первые 3 варианта написания к одному, то есть выделить отдельно dd, mm, ss, а для этого надо определить, в каком виде записано Пробую сделать так: Код (Text): $dd = $mm = $ss = 0; $form='/\d+\.?\d*/'; if (preg_match_all($form, $input, $match) > 0 ) //если ddd.ddddd { preg_match_all($form, $input, $match); } $form='/(\d+\D?+)+?/'; if (preg_match_all($form, $input, $match) > 0 ) //если ddd mm ss.ss { preg_match_all($form, $input, $match); } Оно срабатывает оба раза, так как находит число и успокаивается, и я слабо понимаю, что делать, так как регулярки до меня не доходят
Так всё равно даже в preg_replace надо применять шаблоны для определения, в каком виде запись чтобы сделать дальнейшую обработку. А это у меня и не получается. То, что пытаюсь сделать, срабатывает во всех случаях. Я проверяю, если запись вида стандартных координат, то разбиваю на градусы, минуты, секунды и вычисляю представление в вид "градусы с дробной частью". Если запись вида "градусы дробные минуты", то также разбиваю на части и произвожу вычисления. Если только в виде дробных градусов, то только отбрасываю все не числа, чтобы можно было дальше работать.
Оба if отрабатывает. Вообще, что-то странное произошло, оно сейчас стало работать с $form='/\d+\.?\d*/' так, как меня устраивает, выделяя все части координаты. До этого выбирало почему-то только первое число. Тему можно закрыть, всё равно я дуро, не понимаю, как и почему заработало.