В следующем фрагменте кода pre_match возвращает первое значение широты, за которым следует большое количество символов, а затем значение долготы.
Я ищу последнюю пару широта / долгота.
Как мне ограничить расстояние между двумя показаниями до 4 символов?
Выражение .*? допускает слишком много символов.
Как я могу изменить это, чтобы разрешить меньшее число?

<?php
$lcline="tuesday, 20th. light airs and clear weather. p.m. started at latitude 24 degrees 12 minutes took several azimuth, which gave the variation 16 degrees 30 minutes west. put the ship's company to three watches. wind variable; course south 21 degrees 30 minutes west; distance 28 miles; latitude 31 degrees 17 minutes, longitude 17 degrees 19 minutes west; at noon, funchall, island of madeira, north 13 degrees east, 76 miles. ";

preg_match('/(latitude\s+\d+\s+degrees\s+\d+\s+minutes.*?longitude\s+\d+\s+degrees\s+\d+\s+minutes)/', $lcline, $results);
echo "results=".$results[0]."<BR><BR>"
?>  
1
user2016210 3 Сен 2016 в 17:20

3 ответа

Лучший ответ

Выражение

Функция

{ П}

Совпадение ровно n раз, например: нажмите, чтобы проверить, что «\ w {2}» равно «\ w \ w»; Нажмите, чтобы проверить, что "а {5}" равно "ааааа"

{m, n}

Не менее m, но не более n раз: нажмите, чтобы проверить, что "ba {1,3}" соответствует "ba", "baa", "baaa"

{м,}

Совпадение не менее n раз: нажмите, чтобы проверить, что "\ w \ d {2,}" соответствует "a12", "_ 456", "M12344" ...

?

Совпадение 1 или 0 раз, эквивалентно {0,1}: нажмите, чтобы проверить "a [cd]?" соответствует "a", "ac", "ad".

  • Соответствует 1 или несколько раз, эквивалентно {1,}: нажмите, чтобы проверить совпадения "a + b" "ab", "aab", "aaab" ...

0 или более совпадений, эквивалентно {0,}: нажмите, чтобы проверить, что «\ ^ * b» соответствует «b», «^^^ b» ...

Ссылка: http://www.regexlab.com/en/regref.htm

0
Ehsan Chavoshi 3 Сен 2016 в 15:04

Добавьте .+ в начало регулярного выражения и получите результат из группы 1:

preg_match('/.+(latitude\s+\d+\s+degrees\s+\d+\s+minutes.*?longitude\s+\d+\s+degrees\s+\d+\s+minutes)/s', $lcline, $results);
echo "results=",$results[1],"\n";

Вывод:

results=latitude 31 degrees 17 minutes, longitude 17 degrees 19 minutes
1
Toto 3 Сен 2016 в 14:54

Если вы указали ограничение, вы можете использовать фигурные скобки например: /\s{4}/ это выберет все с 4 пробельными символами последовательно

0
elegisandi 3 Сен 2016 в 15:09