#regex #preg-match
#регулярное выражение #preg-match
Вопрос:
У меня простая, но незаметная (для меня) ошибка в коде. Вы можете мне помочь?
С помощью этого кода в моем php-файле:
$location = $xpath2->query("//script")->item(1)->textContent;
Я получил (выбрал) это:
<script class="" type="text/javascript">
//<![CDATA[
var html = '';
var lat = 44.793530904744074;
var lang = 20.5364727973938;
if (GBrowserIsCompatible())
{
var map = new GMap2(document.getElementById("map_canvas"));
var ct = new GLatLng(lat, lang);
map.setCenter(ct, 15);
map.addControl( new GSmallMapControl() );
//map.addControl( new GHierarchicalMapTypeControl () );
var gm=new GMarker(ct);
if(html != '') {
GEvent.addListener(gm, "click", function() {
this.openInfoWindowHtml( html );
});
}
map.addOverlay(gm);
map.enableContinuousZoom();
map.enableInfoWindow();
}
//]]>
</script>
Затем я пытаюсь извлечь ‘lat’ и ‘lang’ с помощью этого кода:
$location = $xpath2->query("//script")->item(1)->textContent;
preg_match('/vars lats =s (d .d )s*;/', $location, $lat);
preg_match('/vars langs =s (d .d )s*;/', $location, $lng);
$data['lat'] = $lat[1];
$data['lng'] = $lng[1];
Но всегда показывайте, что lat
и lang
есть 0
, 0
когда они должны быть 44.34534
и 20.5345
.
ПОЖАЛУЙСТА, ПОМОГИТЕ! где вы думаете, что я ошибаюсь (мой английский не очень хорош, извините за это)
Комментарии:
1. Вы уверены
lang
, что оно правильно написано?2. да, я уверен, потому что я копирую этот код. 100% — это «язык»
Ответ №1:
Может быть, что-то вроде приведенного ниже. Будьте осторожны, если вы пытаетесь проанализировать JavaScript.
preg_match( '/(?:^|(?<=s))vars lat s* = s* (?=[^;]*d) ([ -]?d*.?d*)s*; /x'
, $location, $ lat);
preg_match( '/(?:^|(?<=s))vars langs* = s* (?=[^;]*d) ([ -]?d*.?d*)s*; /x'
, $location, $ lng);
Запустите пример: http://www.ideone.com/SEgVb
Или просто попробуйте получить более общую информацию:
preg_match( '/(?:^|(?<=s))vars lat s*=s* ([^;]*) s*; /x'
, …
Ответ №2:
Попробуйте так:
preg_match('/vars lats =s ([d.-] )/', $location, $lat);
preg_match('/vars langs =s ([d.-] )/', $location, $lng);
[d.-] соответствует любой группе с числами . или — (широта / долгота могут быть отрицательными)