Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z preg_match_all
Forum PHP.pl > Forum > PHP
dj.bobas
Witam.. na wstępie zaznaczę, że szukałem rozwiązań na google, niestety nie znalazłem rozwiązania.... Mam nastepujacy fragment html który chcę przeparsować za pomocą php:

Kod
..............<SPAN CLASS=Czyt>

<H2><FONT COLOR="FF0000">PIERWSZE CZYTANIE</FONT> Z DRUGIEJ KSIĘGI SAMUELA:<BR>
2 Sm&nbsp;&nbsp;7, 1-5. 8b-12. 14a. 16 &nbsp; <FONT COLOR="#FF0000">Królestwo Dawida będzie trwało wiecznie.</FONT></H2>

<DIR><P>Gdy......

itd.....

Chcę wyciągnąć z tej strony ten fragment. Pobrałem zawartość funkcją file_get_contents. Jeśli napiszę
Kod
$pattern = "|<H2><FONT COLOR=\"FF0000\">.*</FONT>.*<BR>|";
preg_match_all($pattern,$site,$return);
to pobiera dobrze do znacznika br, natomiast nie działa, gdy chcę pobrać aż do otwarcia znacznika font color="#FF0000"....
Kod
$pattern = "|<BR>.*<FONT>|";



Nie mam pojęcia co tu może nie działać...
nevt
  1. <?php
  2. $pattern = "|<BR>.*?<FONT>|";
  3. ?>


poszukaj w googlach o zachłanności znacznika *
dj.bobas
Niestety ten sposób również nie sprawdza się..... stosując znak ? nie wyświetla nic nadal....

To jest cały kod.....

CODE

$file = '20081221';
$url = ('http://www.biblia.pl/SB/KL/2008/12/'.$file.'.htm');

$site = file_get_contents($url);
//echo $site;
//echo strlen($site).'
';
//$site = ereg_replace('#','',$site);
//$pattern = "|< H2 >< FONT COLOR=\"FF0000\" >.*< / FONT >.*< BR >|;
$pattern2 = "|< DIR >.*< / DIR >|;
$pattern = "|< BR >.* ? < FONT >|;
preg_match_all($pattern,$site,$return);
//preg_match_all($pattern2,$site,$return2);
//print_r($return);

if($return!=null)// && $return2!=null)
{
echo 'niepuste';
//var_dump($return);
$i=0;

while($return[0][$i]!=null)// && $return2[0][$i]!=null)
{
//echo(strip_tags($return[0][$i])).'< b r />';
echo $return[0][$i].'< b r />';
//echo $return2[0][$i].'< b r >';
$i++;
}
}
erix
  1. <?php
  2. preg_match_all('#<BR>.+<FONT #s', $x, $a);
  3. ?>
dj.bobas
Cytat(erix @ 20.12.2008, 19:54:40 ) *


Niestety ten sposób również nie działa (znaczy w ogóle coś wypisuje, ale jest to cała zawartość strony.....) sadsmiley02.gif

Chodzi mi o to , aby napisać wyrażenie regularne, które wyciągnie wszystko od < br > w moim poprzednim poście aż do następującego po nim znacznika < font color=....>
nevt
a kto ci kazał powstawiać spacje przed i po ? w patternie? pełno tam niepotrzebnych spacji... i do tego nie dodałeś / przed FONT... dlatego ci nie działa...
dj.bobas
Cytat(nevt @ 20.12.2008, 22:32:11 ) *
a kto ci kazał powstawiać spacje przed i po ? w patternie? pełno tam niepotrzebnych spacji... i do tego nie dodałeś / przed FONT... dlatego ci nie działa...


Te spacje o których mówisz to po to żeby mi nie wstawiało na forum zamiast nich krzaczków....

Normalnie w skrypcie ich nie mam i i tak nie działa.... Tak jakby nie umiał przeczytać tego wyrażenia regularnego...
erix
Testowałem to wyrażenie i działa.
nevt
Cytat
Te spacje o których mówisz to po to żeby mi nie wstawiało na forum zamiast nich krzaczków....

używaj tagów BBcode odpowiednich dla kodu PHP i nie będziesz miał takich problemów...
pinochet
spróbuj zamiast
.* dać w te miejsca ([^<]*)
jednak takie rozwiazanie nie jest doskonałe gdyż pomiędzy znacznikami nie mogą pojawić się inne znaczniki, napisanie wyrazenia które dozwalało by znaczniki jest możliwe ale wygląda ono nieco bardziej skomplikowanie a i tak nie będzie działało w przypadku zagnieżdżeń takich samych znaczników.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.