Autor Zpráva
mackopu
Profil
Zdravím,
načítám do stránky soubor s html obsahem, v něm jsou dvě tabulky a potřebuji vypsat jen první z nich:
$link = "http://neco.cz";
$contents = str_replace("\r\n", "", file_get_contents($link));
if(preg_match('~<table>.*?</table>~i', $contents, $a)) { // ? = líný kvantifikátor
  $table = $a[0];
}
echo $table;
Nefunguje to, nic se nevypíše, kde dělám chybu?

Pozn.: Při použití eregi() se sice vypsaly obě tabulky, ale alespoň něco:
eregi('<table>.*</table>', $contents, $a)
Pan X
Profil
preg_match('~<table>(.*?)</table>~i', $contents, $a)
u preg_match se regulár dává do závorek

edit: Nemáš tam navíc "i" ?
mackopu
Profil
To i by mělo ignorovat velikost písmen. Odstranil jsem ho, regulár dal do závorek a stále nic.
Majkl578
Profil
Možná, že kdybys sem dal odkaz na tu stránku, kterou stahuješ, nemuseli bychom věštit.
Zkus přidat modifikátor s, protože v případě, že konce řádků nejsou CRLF (Windows), tedy ty které nahrazuješ, pořád by tam nové řádky byly.
Výpis na 6. řádku vypíše chybu úrovně E_NOTICE v případě, že preg_match nic nenajde.

$link = 'http://example.com';
if (preg_match('~<table>.+</table>~Uis', file_get_contents($link), $match)) {
    $table = $match[0];
} 

Pan X:
Plácáš hlouposti.
mackopu
Profil
Majkl578:
Nic nezabírá.
Odkaz na stránku není třeba. Když její obsah definuji natvrdo:
$contents = 'blabla něco předtím... <table>  <tr>    <td>aaaaaa</td>  </tr></table><p>&nbsp;</p><table>  <tr>    <td>bbbbbb</td>  </tr></table> blabla cokoliv dalšího...';
tak to stále nefunguje.
Majkl578
Profil
mackopu:
Tak to děláš něco špatně, protože tohle funguje:
$contents = 'blabla něco předtím... <table>  <tr>    <td>aaaaaa</td>  </tr></table><p>&nbsp;</p><table>  <tr>    <td>bbbbbb</td>  </tr></table> blabla cokoliv dalšího...';

if (preg_match('~<table>.+</table>~Uis', $contents, $match)) { 
    var_dump($table = $match[0]);
} 
mackopu
Profil
Majkl578:
Máš pravdu. Já jsem pak totiž potřeboval upravit výsledný řetězec fcí preg_replace():
$str = preg_replace('([0-9]{2})/([0-9]{2})/([0-9]{4})', '\\1.\\2.\\3', $table); // převod formátu data
echo $str;
Co to, že si to spolu nerozumí?
Majkl578
Profil
Chybí ti tam delimitery. Ty jsou u PCRE (narozdíl od ereg funkcí) povinné.
$str = preg_replace('~(\d{2})/(\d{2})/(\d{4})~', '\\1.\\2.\\3', $table);
mackopu
Profil
Majkl578:
Tak to je ono! Teď to chodí jak má. Díky moc!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0