Güya geçerli düzenli ifade PHP herhangi bir veri döndürmüyor

4 Cevap php

Ben aşağıdaki kodu kullanıyorum:

<?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];
?>

Ben normal ifadeler here kontrol ettik ve onlar geçerli olduğu görülmektedir. Ben sadece $ url veya $ verileri kontrol eğer doğru çıkması ve ben $ verileri yazdırmak ve kaynak ben regex kullanmak için arıyorum kodunu kontrol eğer orada. Eğer bir şey kontrol ilgileniyorsanız, uygun bir URL örneğidir http://biz.yahoo.com/research/earncal/g/goog.html olurdu

Ben boş diziler dönmek her ikisi de, var_dump ($ header) ve var_dump ($ tarih) dahil olmak üzere, düşünüyorum her şeyi denedim.

Ben çalışan diğer normal ifadeler oluşturmak mümkün olmuştur. Örneğin, aşağıdaki doğru "Kazanç" döndürür:

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

Ben bu neden çalışmadığını anlamaya çalışıyorum fındık gidiyorum. Herhangi bir yardım harika olurdu. Teşekkürler.

4 Cevap

Sorun HTML aşağıdaki gibi, sen s regex değiştirici ile birleştirmek lazım bunun satırsonu sahip olmasıdır

<?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);
?>

Sizin regex HTML deneyin içinde satır sonları için izin vermez:

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

s . (herhangi bir maç) içinde satır karakterleri maç söyler.

Sen s (PCRE_DOTALL) değiştirici eklemek istediğiniz. Varsayılan olarak . newline maç ve ben sayfası için bakmak, iki parça arasında onlara sahiptir görmüyor.

Onlar (Okunabilir hariç) incitme rağmen Side note: Ne, < ve > önce ters eğik çizgi gerekmez.

Ben düz metin var sanki regex için değerleri uyguluyorsanız çünkü bu olduğunu düşünüyorum. Ancak, HTML bulunuyor. Örneğin, regex ayrıştırmak için modifiye edilmelidir:

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

Gibi normal düz metin ayrıştırmak değil: ". Önceki Haftası ...."