Autor Zpráva
ahoj
Profil *
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 *
tie regulari som nikdy nechapal ani nepochopim, musí to ísť aj ináč :/
ShiraNai7
Profil
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 *
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
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.
ahoj
Profil *
takže je to cez explode() a list()


a žiadne zlozite preg_match..
Keeehi
Profil
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.

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