XPath регулярное выражение в сочетании с preg_match - PullRequest
0 голосов
/ 05 октября 2011

У меня простая, но невидимая (для меня) ошибка в коде.Можете ли вы мне помочь?

С этим кодом в моем 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('/var\s+lat\s+=\s+(\d+\.\d+)\s*;/', $location, $lat); 
preg_match('/var\s+lang\s+=\s+(\d+\.\d+)\s*;/', $location, $lng); 
$data['lat'] = $lat[1]; 
$data['lng'] = $lng[1];

Но всегда показывайте, что lat и lang это 0, 0, когда они должны быть 44.34534 и 20.5345

ПОЖАЛУЙСТА, ПОМОГИТЕ!где вы думаете, что я не прав (мой английский не очень хорошо, извините за это)

Ответы [ 2 ]

0 голосов
/ 05 октября 2011

Может быть, что-то вроде ниже. Осторожно, хотя вы пытаетесь разобрать JavaScript.

preg_match ('/(?:^|(?<=\s))var\s+lat \s* = \s* (?=[^;]*\d) ([+-]?\d*\.?\d*)\s*; /x', $ location, $ lat);
preg_match ('/(?:^|(?<=\s))var\s+lang\s* = \s* (?=[^;]*\d) ([+-]?\d*\.?\d*)\s*; /x', $ location, $ lng);

Выполнить образец: http://www.ideone.com/SEgVb

Или просто попробуйте получить более общую информацию:

preg_match ('/(?:^|(?<=\s))var\s+lat \s*=\s* ([^;]*) \s*; /x', ...

0 голосов
/ 05 октября 2011

Попробуй так:

preg_match('/var\s+lat\s+=\s+([\d.-]+)/', $location, $lat); 
preg_match('/var\s+lang\s+=\s+([\d.-]+)/', $location, $lng);

[\ d .-] + соответствует любой группе с номерами. или - (широта / долгота может быть отрицательной)

...