Autor | Zpráva | ||
---|---|---|---|
Berny Profil |
#1 · Zasláno: 16. 1. 2009, 10:06:53
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 |
#2 · Zasláno: 16. 1. 2009, 10:19:24
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 |
#3 · Zasláno: 16. 1. 2009, 11:27:55 · Upravil/a: Kcko
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. |
||
Časová prodleva: 3 roky
|
|||
Kordy Profil * |
#4 · Zasláno: 10. 11. 2011, 11:38:11
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 |
#5 · Zasláno: 10. 11. 2011, 11:48:29
Kordy:
Na vybírání obsahu různých HTML prvků a podobné věci bude lepší HTML parser. |
||
Kordy Profil * |
#6 · Zasláno: 10. 11. 2011, 11:52:40
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 * |
#7 · Zasláno: 10. 11. 2011, 12:05:17
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 * |
#8 · Zasláno: 10. 11. 2011, 16:50:42
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 |
#9 · Zasláno: 10. 11. 2011, 17:53:16
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 * |
#10 · Zasláno: 10. 11. 2011, 18:38:57
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 * |
#11 · Zasláno: 10. 11. 2011, 18:41:23
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 |
#12 · Zasláno: 10. 11. 2011, 18:45:10
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 * |
#13 · Zasláno: 10. 11. 2011, 19:02:01
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 |
#14 · Zasláno: 10. 11. 2011, 19:04:32
Kordy:
nechte si vypsat celé to pole, bude to přehlednější echo '<pre>'; var_dump($matches); |
||
Kordy Profil * |
#15 · Zasláno: 10. 11. 2011, 19:10:28
Takhle vypíše NULL ať už na 4. parametr dosadím cokoli.
|
||
Kordy Profil * |
#16 · Zasláno: 10. 11. 2011, 19:24:13
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 * |
#17 · Zasláno: 10. 11. 2011, 19:26:35
+ 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 |
#18 · Zasláno: 10. 11. 2011, 19:43:02
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); |
||
Kordy Profil * |
#19 · Zasláno: 10. 11. 2011, 19:49:44
Já sem vůl :D Jak mi tohle mohlo nedojít... Díky za čas :)
|
||
Časová prodleva: 12 let
|
0