/ / PHP Regex липсва група за улавяне - php, regex

PHP Regex липсва група за улавяне - php, regex

Опитвам се да анализирам няколко координати, но в PHP preg_match липсва група за улавяне. Тя работи във всеки реекс симулатор, който съм тествал, но не и в моя код. Група 4 винаги излиза празна;

$coordinates = "N40.765775°  E8.303369°";
// -40.765775°  -8.303369°
//  40.765775°  8.303369°
// -40.765775°  8.303369°
// N40.765775°  E8.303369°
// S40.765775°  E8.303369°
// N40.765775°  W8.303369°
// S40.765775°  W8.303369°

$regex = "/([-NnSs]?)D*([0-9]?[0-9]).(d{1,10}+)Dh*([-EeWw]?)D*([0-1]?[0-9]?[0-9]).(d{1,10}+)/";
if (preg_match($regex, $coordinates, $matches)) {
print_r($matches);
} else {
echo "no matches";
}

Отговори:

2 за отговор № 1

Тъй като анализирате низове, които имат многобайтови знаци (°), трябва да добавите unicode модификатор, т.е. u в края на регенерацията.

/      /u

Само като илюстрация: без този модификатор, ако бихте добавили . след D, тук:

D.h*([-EeWw]?)

... тогава ще уловиш "Е" в четвъртата група за залавяне. Така D. всъщност съвпада с многобайтовия знак °.