Autor Zpráva
Berny
Profil
Zdravím,

již z nadpisu je asi jasné co potřebuji. Zkusím ještě uvést příklad.

Řekněme, že mám nějaký text - na HTML stránku:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">;
  <title>Title</title>
  </head>
  <body>
   Text na více řádků Text na více řádků Text na více řádků Text na více řádků 
   Text na více řádků Text na více řádků 
   Text na více řádků Text na více řádků Text na více řádků 
   Text na více řádků Text na více řádků 
   {START}
   Můj hledaný text Můj hledaný text Můj hledaný text 
   Můj hledaný text Můj hledaný text 
   Můj hledaný text Můj hledaný text Můj hledaný text Můj hledaný text 
   Můj hledaný text Můj hledaný text 
   {END}
   Text na více řádků Text na více řádků 
   Text na více řádků 
   Text na více řádků Text na více řádků Text na více řádků 
   Text na více řádků Text na více řádků 
  </body>
</html>


Na tento HTML soubor bych potřeboval použít nějakou funkci (vím, že něco takového existuje, ale nikde se mi nepodařilo zjistit, jak se jmenuje), která mi vrátí pouze text mezi konstantami {START} a {END}. Pochopitelně by na to šla napsat vlastní funkce, ale tomu se chci právě vyhnout.

Předem děkuji za každý nápad.
Bernard
Joker
Profil
preg_match a regulární výraz

preg_match("/\{START\}(.+)\{END\}/s", $html, $match)

$match[1] by měl být text mezi těmi značkami
Kcko
Profil
Ted jsem to take psal ...

// perex stranky z DB pomoci spec. znacek
$q = mysql_fetch_row(mysql_query("SELECT * FROM stranky WHERE id = 99"));
preg_match("~{START_PEREX}(.+){END_PEREX}~si", $q[3], $out);
echo $out[1];

Edit: Koukam ze byl Joker rychlejsi, nechal jsem si dele otevrene okno.
Kordy
Profil *
Vím, že píšu po nějáké době, ale bylo by reálně nějak vybrat odkaz? Nebo třeba obsah <body> </body>? Jak by to vypadalo pokud bych chtěl obsah nějákého párového příkazu? Pořád zkouším hledám nenacházím děkuji :)
Joker
Profil
Kordy:
Na vybírání obsahu různých HTML prvků a podobné věci bude lepší HTML parser.
Kordy
Profil *
Nemusí to být samozřejmě totéž co jste myslel, ale google mi vyhodil nějákej program. Já ale potřebuji s odkazem v php dále pracovat... Je možné obsah nějak automaticky(bez zásahu uživatele) přesunout někam na internet?
Kordy
Profil *
Nějak jsem to dal do kupy. Děkuji za reakci :)
Pro ty co maj podobnou potřebu:

<?php
$odkud = "<a href='odkaz'>aaa</a>";
preg_match("~href='(.+)'>~", $odkud, $vypis );
echo $vypis[1];
?>


Do tučných částí je možno doplnit cokoli. Vlastně je to totéž co se zde již objevilo, ale fungovalo mi až tohle nevím proč...1. ukázku jsem vůbec nepochopil 2.(můj pocit) obsahuje nadbytečné "si"
END_PEREX}~si",  
Kordy
Profil *
Teď, ale závažnější problém. Co udělat když je tam odkazů více a chci zobrazit všechny? Když jsem jich tam pár připsal vzal mi první a poslední značku jak dosáhnout toho, aby vzal ty co k sobě patří?
Tori
Profil
Kordy:
Když jsem jich tam pár připsal vzal mi první a poslední značku
Změnit (.+) na (.+?) - tím docílíte, že regulár nebude "hladový" a zachytí nejkratší vyhovující řetězec. Bez toho to bere nejdelší vyhovující.

Co udělat když je tam odkazů více a chci zobrazit všechny?
preg_match_all
Kordy
Profil *
Děkuji to je myslím ono... Můžu ještě otravovat? Vím, že mi bylo poskytnuto všechno potřebné k pochopení, ale angličtina mi nejde a nezjistil jsem moc jak to vypsat :( Mám kód:

$odkud = file_get_contents("text.txt");
preg_match_all('~href="(.+?)"~', $odkud, $matches );


A ten výpis neví někdo? Zkoušel jsem, ale nic nešlo...
Kordy
Profil *
Takhle fungovalo, ale je jich tam víc a sám nemusím v některých případech kolik. Jak to udělat aby vypsal všechny co tam jsou?
Tori
Profil
Kordy:
Nalezené výsledky se vám ukládají do $matches. A vyzkoušejte, jak se změní pole výsledků, když zadáte některou z možných konstant jakou 4.parametr.
Kordy
Profil *
když tam dám PREG_OFFSET_CAPTURE vypíše Array,Array jinak vypisuje stále totéž...(1. dva odkazy) Spíš se obávám, že nechápu princip [0] a [1]
Tori
Profil
Kordy:
nechte si vypsat celé to pole, bude to přehlednější
echo '<pre>'; var_dump($matches);
Kordy
Profil *
Takhle vypíše NULL ať už na 4. parametr dosadím cokoli.
Kordy
Profil *
Chápu zprávně, že by měl kód vypadat nějak takhle?

<?php
$odkud = file_get_contents("text.txt");
preg_match_all('~href="(.+?)"~', $odkud, $out);
echo '<pre>'; var_dump($matches);
?> 
Kordy
Profil *
+ ten 4. parametr samozřejmě, ale asi bude chyba někde jinde, protože jsem ho zkoušel ve všech možných variantách:)
Tori
Profil
Kordy:
Chápu zprávně, že by měl kód vypadat nějak takhle?
Oprava, ve [#12] mělo být: Nalezené výsledky se ukládají do proměnné, kterou zadáte jako 3.parametr. Takže
$odkud = file_get_contents("text.txt");
preg_match_all('~href="(.+?)"~', $odkud, $out);
echo '<pre>'; var_dump($out);
(vycházela jsem z [#10], kde se ta proměnná jmenovala jinak).
Kordy
Profil *
Já sem vůl :D Jak mi tohle mohlo nedojít... Díky za čas :)

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