Autor Zpráva
Neznámý
Profil *
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
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";
?>
A html.html by asi vypadalo:
text
<h1>text</h1>
<a href="text">text</a> - spolu to tu je 4x
Ak chces nieco ine staci napisat. (ak ich chces aj vypisat odstran // )
Tori
Profil
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
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;}
je velmi zatazujuce
Neznámý
Profil *
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 *
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
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 *
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
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
<?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>";
    }
}
?>
Navod:
$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>
zobrazi iba ahoj a test, lebo $h = $t[2 ] (vid navod, preco zobrazi tento vysledok)

dufam ,ze toto je to ,co si potreboval

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