javascript — выражение регулярных выражений PHP извлечь широту & amp; долгота от функции JS

Я использую simple_html_dom PHP библиотека поцарапать некоторое содержимое страницы. Я хотел бы извлечь широту и долготу со страницы, но мне нужно выражение регулярного выражения для доступа к этим значениям, так как эти значения доступны только на странице в функции Javascript:

function loadMap() { setTimeout("setMap(39.364016, 3.226783, 'Hotel Casa',
'icon.png', 'key')", 200)};

Я получил приведенный выше пример в строке. Что было бы хорошо оптимизированным выражением регулярного выражения (с использованием PHP) для извлечения широты (39.364016) и долготы (3.226783) из этой строки? Я новичок в выражениях регулярных выражений, поэтому мои попытки пока не увенчались успехом, я надеюсь, что кто-нибудь сможет мне помочь. Спасибо.

1

Решение

Используя именованные захваты, которые могут показаться вам более понятными:

<?php
$html = <<<HTML
<html>
...
function loadMap() { setTimeout("setMap(39.364016, 3.226783, 'Hotel Casa',
'icon.png', 'key')", 200)};
...
</html>
HTML;

$regex = '/setMap\((?P<latitude>[0-9\.\-]+), (?P<longitude>[0-9\.\-]+)/';

$matches = [];
preg_match($regex, $html, $matches);

echo "Latitude: ", $matches['latitude'], ", Longitude: ", $matches['longitude'];

// Latitude: 39.364016, Longitude: 3.226783
1

Другие решения

Используйте это регулярное выражение:

/setMap\((\-?\d+\.?\d*), ?(\-?\d+\.?\d*)/

подробности

setMap\(   match that string, literally, with the open parentheses
\-?        optional minus symbol
\d+        a digit, one or more times
\.?        a literal dot, optional (in the rare case you get an integer)
\d         a digit, 0 or more times (in the rare case you get an integer)
, ?         an comma followed optionally by a space

демонстрация

1

Ты можешь попробовать

 /[0-9]{1,3}[.][0-9]{4,}/
0

Оптимизированный и регулярное выражение на самом деле не идет рука об руку с этим простым анализом.
Вот «оптимизированное» решение с использованием Substr и strpos.

$str =  <<<EOD
function loadMap() { setTimeout("setMap(39.364016, 3.226783, 'Hotel Casa',
'icon.png', 'key')", 200)}
EOD;

$pos = strpos($str, "setMap(") + 7; //find position of setMap(
$latlon = Substr($str, $pos, strpos($str, ", '")-$pos); // substring from setMap to `, '`
List($lat, $lon) = explode(", ", $latlon); // explode the latlon to each variable.
Echo $lat . " " . $lon;

https://3v4l.org/qdIl4

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector