Autor | Zpráva | ||
---|---|---|---|
Neznámý Profil * |
#1 · Zasláno: 3. 1. 2012, 14:26:05
Zdravíčko, už nějakou dobu se snažím udělat reg. výraz, který by mi našel v textu mezi některýma html znakama textt. Nnapříklad apříklad <h1>text</h1> a pod. Díky za pomoc.
|
||
SeparateSK Profil |
#2 · Zasláno: 3. 1. 2012, 20:29:41 · Upravil/a: SeparateSK
Mozes popisat podrobnejsie ?
Ked potrebujes zistitk kolkokrat sa to tam nachadza pouzi toto: <?php $subor=file_get_contents("html.html"); $subor=stripslashes($subor); echo $subor."<br>"; $slovo="text"; $pocet=0; $regexp = "$slovo"; if(preg_match_all("/$regexp/siU", $subor, $text, PREG_SET_ORDER)) { foreach($text as $t) { //$h=$t[0]; //echo $h.","; $pocet+=1; } } echo "Slovo $slovo sa v subore nachadza $pocet -krat"; ?> text <h1>text</h1> <a href="text">text</a> - spolu to tu je 4x |
||
Tori Profil |
#3 · Zasláno: 3. 1. 2012, 20:46:24 · Upravil/a: Tori
Neznámý:
Případně lze použít i obyčejné řetězcové funkce, obzvláště v případě, že hledaný text je uvnitř takového HTML, které se na stránce vyskytuje jen jednou (např. prvek s určitým id): substr, strpos. Bude to o něco rychlejší, a i v manuálu se doporučuje používat řetězcové funkce místo regulárů, je-li to možné. Zvýrazněno v reakci na ↓ |
||
SeparateSK Profil |
#4 · Zasláno: 3. 1. 2012, 21:23:12 · Upravil/a: SeparateSK
strpos neni presny ak chces najst viacej vysledkov , vyhodi iba jednu poziciu (tu co prvu najde)
a for($i=0;$i<=strlen($subor);$i++){ if(substr($subor,0,strlen($text))==$text)$pocet+=1;} |
||
Neznámý Profil * |
#5 · Zasláno: 4. 1. 2012, 00:50:10
No já potřebuju najít nadpisky, které budou na nějaké stránce. Nechci vědět kolikrát to tam je, ale spíš obsah mezi tagy. Díky.
|
||
DoubleThink Profil * |
#6 · Zasláno: 4. 1. 2012, 02:51:39 · Upravil/a: DoubleThink
Tori:
„a i v manuálu se doporučuje používat řetězcové funkce místo regulárů, je-li to možné.“ Nevšiml jsem si. Pokud to někdo dělá, je idiot. Výkonový rozdíl je v běžných podmínkách prakticky neměřitelný. Obecně je na hledání jakéhokoliv (neexplicitního) řetězce regulární výraz jediná rozumná volba. Neznámý: „No já potřebuju najít nadpisky, které budou na nějaké stránce.“ Pro nalezení (jakéhokoliv) nadpisu třeba výraz /<(h\d)>(.+?)<\/\1>/m |
||
Tori Profil |
#7 · Zasláno: 4. 1. 2012, 09:30:15
DoubleThink:
Je to u str_replace: „If you don't need fancy replacing rules (like regular expressions), you should always use this function instead of preg_replace().“ Vztahovala jsem to teda (nepodloženě) i na strpos vs. preg_match. Ale máte pravdu, na "jakýkoli nadpis" je lepší regulár. |
||
Neznámý Profil * |
#8 · Zasláno: 4. 1. 2012, 10:30:32
preg_match("/<(h\d)>(.+?)<\/\1>/m", "<h1>Text v h1 - 1</h1> <p>mimo h1</p>", $out); echo "<pre>"; var_dump($out); exit; Proč mi tento kód vrátí prázdné pole? |
||
Tori Profil |
#9 · Zasláno: 4. 1. 2012, 10:36:58
Protože
"\1" znamená znak s ASCII kódem 1 zapsaný v osmičkové soustavě. (manuál) Zpětné lomítko je potřeba escapovat.
|
||
SeparateSK Profil |
#10 · Zasláno: 4. 1. 2012, 12:07:25 · Upravil/a: SeparateSK
<?php $subor=file_get_contents("html.html"); $subor=stripslashes($subor); $pocet=0; $regexp = "<h[0-3] ?(.*)>(.*)<\/h[0-3]>"; //h[0-3] = h0 az 3 , ?(.*) moze tam byt ale aj nemusi, (.*) = hocijaky text if(preg_match_all("/$regexp/siU", $subor, $text, PREG_SET_ORDER)) { foreach($text as $t) { $h=$t[2]; echo $h."<br>"; } } ?> $t[0]=zobrazenie celeho H1,H2,H3 (vystup <h1>...</h1> ...) $t[1]=ak sa vnutri tagu H1,2,3 nachadza napr style="blabla"; tak zobrazi tieto detaily ale nie obsah h1,2,3 (vystup: style="blabla") $t[2]=zobrazi text v h1,2,3 tagu (vystup: text medzi h1,2,3 tagmi) HTML subor moze vypadat napr <html> <h1> ahoj</h1><br><pre>ako sa mas ? </pre> <h2>test</h2> </html> dufam ,ze toto je to ,co si potreboval |
||
Časová prodleva: 12 let
|
0