2008-10-21 6 views
1

에서 데이터를 반환하지 않습니다기발한 유효한 정규 표현식 나는 다음과 같은 코드를 사용하고 PHP

<?php 
$stock = $_GET[s]; //returns stock ticker symbol eg GOOG or YHOO 
$first = $stock[0]; 

$url = "http://biz.yahoo.com/research/earncal/".$first."/".$stock.".html"; 
$data = file_get_contents($url); 

$r_header = '/Prev. Week(.+?)Next Week/'; 
$r_date = '/\<b\>(.+?)\<\/b\>/'; 

preg_match($r_header,$data,$header); 
preg_match($r_date, $header[1], $date); 

echo $date[1]; 
?> 

나는 정규 표현식을 here 확인했습니다 그들은 유효한 것으로 나타납니다. $ url 또는 $ 데이터를 올바르게 검사하면 $ data를 출력하고 소스를 확인하면 정규 표현식에서 사용할 코드를 찾을 수 있습니다. 확인하는 데 관심이 있다면 적절한 URL의 예는 http://biz.yahoo.com/research/earncal/g/goog.html

입니다. var_dump ($ header)와 var_dump ($ date)를 모두 포함하여 내가 생각할 수있는 모든 것을 시도했습니다. 둘 다 반환됩니다. 빈 배열.

나는 다른 정규 표현식을 만들 수있었습니다. 예를 들어, 다음은 '수익'을 올바르게 반환합니다.

$r_header = '/Company (.+?) Calendar/'; 
preg_match($r_header,$data,$header); 
echo $header[1]; 

나는 이것이 왜 작동하지 않는지 알아 내려고 노력하고 있습니다. 어떤 도움이라도 굉장합니다. 감사.

답변

3

문제는 HTML 당신은 s (PCRE_DOTALL) 수정을 추가 할

<?php 
$stock = "goog";//$_GET[s]; //returns stock ticker symbol eg GOOG or YHOO 
$first = $stock[0]; 

$url = "http://biz.yahoo.com/research/earncal/".$first."/".$stock.".html"; 
$data = file_get_contents($url); 

$r_header = '/Prev. Week(.+?)Next Week/s'; 
$r_date = '/\<b\>(.+?)\<\/b\>/s'; 


preg_match($r_header,$data,$header); 
preg_match($r_date, $header[1], $date); 

var_dump($header); 
?> 
0

일반 텍스트처럼 값을 정규식에 적용하기 때문에 이것이라고 생각합니다. 그러나 HTML입니다.

<a href="...">Prev. Week</a> ...

같은 일반 일반 텍스트 구문 분석하지 않음 : 예를 들어, 정규식 구문 분석을 수정해야합니다. "이전 주를 ...."

4
귀하의 정규식은 줄을 허용하지 않습니다

HTML에서 휴식을 시도해보십시오

$r_header = '/Prev\. Week((?s:.*))Next Week/'; 

s는 (과 일치)를 .에서 개행 문자와 일치한다는 뜻입니다.

2
  1. 점은 기본적으로 개행과 일치하지 않습니다.
  2. $r_header/your-regex/s 아마 참고 /Prev\. Week(.+?)Next Week/s
  3. 해야합니다 : 당신은 정규식에 <>을 탈출 할 필요가 없습니다.
2

아래로 당신이의 정규식 수정 자와 통합해야 그 안에 줄 바꿈을 가지고 있다는 것입니다. 기본적으로 .은 개행과 일치하지 않으며 페이지에 두 부분이 있습니다.

사이드 참고 : 그들은 (가독성 제외) 다치게하지 않아 있지만, 당신은 <> 앞에 백 슬래시가 필요하지 않습니다.

관련 문제