Регулярное выражение для (x1;y1)(x2;y2)
Помогите составить регулярку для (x1;y1)(x2;y2)
Нужно вытащить каждую координату
Ответы (4 шт):
Автор решения: Евгений Тихии
→ Ссылка
Была у программиста проблема, решил он воспользоваться регулярным выражением и вот...теперь у него две проблемы) Предлагаю решение подобного вида.
$input = "(55.456867;45.234544)(60.546345;54.325633)(55.4535867;45.2365444)(60.546345;54.3235333)(55.4567;45.2342)(60.234;54.12312312)(55.3457;45.6456)(60.86447;54.262673)";
$input = rtrim (ltrim ($input, '('), ')');
$inputArray = explode (')(', $input);
foreach ($inputArray as $cord) {
$cords[] = explode (';', $cord);
}
var_dump ($cords);
На выходе получите:
array(8) { [0]=> array(2) { [0]=> string(9) "55.456867" [1]=> string(9) "45.234544" } [1]=> array(2) { [0]=> string(9) "60.546345" [1]=> string(9) "54.325633" } [2]=> array(2) { [0]=> string(10) "55.4535867" [1]=> string(10) "45.2365444" } [3]=> array(2) { [0]=> string(9) "60.546345" [1]=> string(10) "54.3235333" } [4]=> array(2) { [0]=> string(7) "55.4567" [1]=> string(7) "45.2342" } [5]=> array(2) { [0]=> string(6) "60.234" [1]=> string(11) "54.12312312" } [6]=> array(2) { [0]=> string(7) "55.3457" [1]=> string(7) "45.6456" } [7]=> array(2) { [0]=> string(8) "60.86447" [1]=> string(9) "54.262673" } }
Автор решения: PotroNik
→ Ссылка
\(([0-9]+(?:[.,][0-9]+){0,1});([0-9]+(?:[.,][0-9]+){0,1})\)
выбирается из (55.456867;45.234544) в группе 1: 55.456867 в группе 2: 45.234544
Под совпадение не попадут координаты (55.;45.) но подойдут под шаблон (55333;45333)
Пример тут:
https://regex101.com/r/NdAZew/5
Автор решения: Кирилл Малышев
→ Ссылка
Можно использовать функцию sscanf
$s = '(55.456867;45.234544)(60.546345;54.325633)';
sscanf($s, '(%f;%f)(%f;%f)', $x1, $y1, $x2, $y2);
echo $x1.' '.$y1."\n".$x2.' '.$y2;
