2013-04-26 3 views
1

웹 페이지의 스크립트에서 json 개체를 추출해야합니다.HTML 태그의 Json 데이터 구문 분석

<html> 
<script> 
    ..... 
</script> 
<script type=\"text/javascript\"> 
    $(function(){ 



     $(\"#map5\").gMap({ maptype: G_SATELLITE_MAP, 
     controls: false, 
        scrollwheel: false, 

        markers: [ 

{.....},{......},], 

latitude: 24.70115790054175, 
longitude: 46.04358434677124, 
zoom: 5 
}); 

}); 
</script> 
</head> 
<body> 
    .... 
</body> 
</html> 

내가 재치 { maptype:을 시작하여 JSON 객체를 추출 할 :이 웹 페이지의 일부입니다. 나는 이것을 달성하기 위해 regular expression 접근법을 사용하는 것을 생각했다. 여기 내가 한 일이 있습니다 :

$html = file_get_contents($url); 
$regex_pattern = "/\<script.*/"; 
preg_match_all($regex_pattern,$html,$matches); 

그러나 내 패턴은 개체의 첫 번째 줄만 선택하는 것 같습니다! 나는 모든 객체를 선택하는 방법을 찾아 낼 수 없었다.

도움이 될 것입니다.

+0

정규 표현식에 텍스트 만의 개별 라인을 고려하십시오. 다중 행'/ m' 플래그 –

+0

FYI가 필요합니다. JSON이 아닙니다. JavaScript 객체 리터럴입니다. – JAAulde

답변

1

Elsalamoe의 3aleikom : D

여기 당신이 그것을 할 방법은 다음과 같습니다

$script = <<<FIL 
<script type=\"text/javascript\"> 
    $(function(){ 



     $(\"#map5\").gMap({ maptype: G_SATELLITE_MAP, 
     controls: false, 
        scrollwheel: false, 

        markers: [ 

{.....},{......},], 

latitude: 24.70115790054175, 
longitude: 46.04358434677124, 
zoom: 5 
}); 

}); 
</script> 
FIL; 

preg_match_all('/<script[^>]*>.*?\.gMap\(\s*({.*?})\);.*?<\/script>/mis', $script, $m); 
var_dump($m[1]); 

Online demo with explanation.

+1

매력처럼 작동합니다! 고마워. – iTurki

0

패턴이 실패하는 이유는 도트 .이 줄 바꿈과 일치하지 않기 때문이며 원하는 경우 패턴 끝 부분에 s 수정자를 추가해야합니다. 다중 행 모드 (m 수정 자)는 여기서는 유용하지 않습니다.

이 시도 : 기본적으로

$json = (preg_match('~\.gMap\s*+\(\s*+\K\{.+?\}(?=\s*+\)\s*+;)~s', $html, $result))? 
    $result[0] : false;