Autor | Zpráva | ||
---|---|---|---|
mackopu Profil |
#1 · Zasláno: 16. 8. 2011, 14:02:03
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; Pozn.: Při použití eregi() se sice vypsaly obě tabulky, ale alespoň něco: eregi('<table>.*</table>', $contents, $a) |
||
Pan X Profil |
#2 · Zasláno: 16. 8. 2011, 15:09:34 · Upravil/a: Pan X
preg_match('~<table>(.*?)</table>~i', $contents, $a) edit: Nemáš tam navíc "i" ? |
||
mackopu Profil |
#3 · Zasláno: 16. 8. 2011, 15:15:09
To i by mělo ignorovat velikost písmen. Odstranil jsem ho, regulár dal do závorek a stále nic.
|
||
Majkl578 Profil |
#4 · Zasláno: 16. 8. 2011, 15:23:04
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 |
#5 · Zasláno: 16. 8. 2011, 15:42:26 · Upravil/a: mackopu
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> </p><table> <tr> <td>bbbbbb</td> </tr></table> blabla cokoliv dalšího...'; |
||
Majkl578 Profil |
#6 · Zasláno: 16. 8. 2011, 15:48:42
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> </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 |
#7 · Zasláno: 16. 8. 2011, 16:07:31
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; |
||
Majkl578 Profil |
#8 · Zasláno: 16. 8. 2011, 16:16:27
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 |
#9 · Zasláno: 16. 8. 2011, 16:18:54
Majkl578:
Tak to je ono! Teď to chodí jak má. Díky moc! |
||
Časová prodleva: 13 let
|
0