Autor | Zpráva | ||
---|---|---|---|
ahoj Profil * |
#1 · Zasláno: 4. 6. 2012, 17:58:21
Zdravím, poradíte mi ako mám okopírovať cez PHP kód časť obsahu z inej stránky?
Na inej stránke v zdrojáku je napr.: <table> <tr><td>nejaky obsah</td></tr> <tr> <td><div id="cena">0,40€ / Mesiac</div></td> </tr> <td><td>dalsi obsah</td></tr> </table> ako cez PHP kód získam iba ten zvýraznení kód? Raz som už mal takýto skript, ale stratil som ho a teraz si neviem spomenúť ako to bolo. Bolo to asi cez file_get_contetns a niekde som si nadefinoval že "<tr>" a potom číslami že koľký "<tr>" od hora sa má prečítať.. |
||
ShiraNai7 Profil |
ahoj:
Jednoduše by to šlo regulárama, "složitěji" přes DOM třídy. Příklad s regulárama: $obsah = file_get_contents('http://example.com/'); preg_match('~<tr>\s*<td><div id="cena">([0-9,]+)~', $obsah, $matches); if(!empty($matches)) { // v $matches[1] bude cena (napr. 0,40) } |
||
ahoj Profil * |
#3 · Zasláno: 4. 6. 2012, 19:22:53
tie regulari som nikdy nechapal ani nepochopim, musí to ísť aj ináč :/
|
||
ShiraNai7 Profil |
#4 · Zasláno: 4. 6. 2012, 22:59:54
ahoj:
Nepotřebuješ je chápat když tu máš naservírované hotové řešení. |
||
peta Profil |
ahoj:
Reg. nejsou tak slozite, jak vypadaji. Nejvic mi pomohla tahle stranka: http://www.visibone.com/regular-expressions/ Reg. vyraz se pouziva pro hledani textu a nahrazovani, kde nestaci nahradit text1 za text 2 ( "ahoj" za "dobry den"). text: aaa, (aaaaaa), a --- najit: a, aa, aaa, aaaa, aaaaa, ... nahradit za: a reg. hledajici vyraz: a+ reg. nahrazujici vyraz "a" vysledek: a, (a), a --- najit: aa, aaa, aaaa nahradit za: a reg. hledajici vyraz: a{2,4} reg. nahrazujici vyraz "a" vysledek: a, (a), a --- najit: (aaaaaa) // najit jakykoliv text v zavorce nahradit za: zavorka: puvodni text reg. hledajici vyraz: \((.*?)\) reg. nahrazujici vyraz "(zavorka: $1)" vysledek: aaa, (zavorka: aaaaaa), a . = jakykoliv znak * = opakovany 0 az nekonecno *? = opakuj dokud nenarazis na text nasledujici po ? (za nim je ve vyrazu kulata zavorka - popsano niz, a text \) ) () - vyber prvni text \( \) - vnejsi zavorky okolo musi byt s lomitkem $1 - pouzij prvni vybrany text To byl popis pro javascript. ~<tr>\s*<td><div id="cena">([0-9,]+)~ ~ zacatek a konec vyrazu (cili vlnku musis uvnitr zalomitkovat, kdybys ji chtel hledat) <tr> = tag tr \s* = mezera opakovana 0 az nekonecno <td><div id="cena"> = tagy () = zavorka pro vyber $matches[1] [0-9,]+ = (jeden ze znaku 0,1,2,3,4,5,6,7,8,9,znak carky) opakovane 1 az nekonecno |
||
ahoj Profil * |
#6 · Zasláno: 6. 6. 2012, 17:23:39 · Upravil/a: ahoj
peta:
takéto veci som už čítal XYZ-krát :) Existuje aj iný spôsob, kde si nastavím čo sa má vyhladať a ak je to tam viac krát tak len píšem $vyhladanyVyraz[1] je prve najdene <td><tr> $vyhladanyVyraz[2] je druhe najdene <td><tr> atd |
||
Keeehi Profil |
#7 · Zasláno: 6. 6. 2012, 17:54:49
ahoj:
Pokud se to na stránce vyskytuje vícekrát, tak použít preg_match_all(). Tobě nezbývá než se buď naučit reguláry, nebo se k tomu prořezat skrz strpos() a substr(), ale to je strašná práce. |
||
Časová prodleva: 4 dny
|
|||
ahoj Profil * |
#8 · Zasláno: 10. 6. 2012, 08:57:37 · Upravil/a: ahoj
takže je to cez explode() a list()
a žiadne zlozite preg_match.. |
||
Keeehi Profil |
#9 · Zasláno: 10. 6. 2012, 09:08:59
ahoj:
Ano, i pomocí eplode to rozdělit jde. V paměti se ale zbytečně vytváří pole které má velikost vstupního řetězce. Jinak řečeno explode v paměti řetězec "překopíruje a rozseká", kdežto preg_match jen řetězec projde a vybere z něj jen to, co tě zajímá. Při větší zátěži to bude nejspíš znát. |
||
Časová prodleva: 12 let
|
0