Autor Zpráva
Ulet
Profil *
Dobrý den,
mám menší problém s regulérnímy výrazy (asi to bude protože je neumim) někde v textu mám řetězec
<div class="nazev_tridy">Text který potřebuji vypsat</div>
s regulérním výrazem
\<div[ ]class\=\"nazev\_tridy\"\>(.+?)\<\/div\> by to podle www.regexp.cz/index.php mělo fungovat ale preg_match vypise 0 (jako pocet nalezenych retezcu) navic bych z retezce potreboval jen dostat tu cast co je v divu uzavrena tedy: "Text který potřebuji vypsat" (bez uvozovek). Tohle jen pokud to de jednoduše udělat pomoci regulernich vyrazu odstrihnout ten zacatek a konec kdyztak udelam pomoci funkci php (presnou delku znam takze neni problem).

Moderátor Joker: Titulek „regulerni vyraz“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
A je to regulární výraz
greeny
Profil
Vnitřní text můžeš z divu dostat např pomocí jQuery (pokud nepotřebuješ s textem něco dělat ještě na serveru) pomocí funckce .html:
var content = $('#id_divu').html();
V regulérních výrazech se nevyznám, ale tomu ověřovacímu scriptu bych docela věřil, zkontroluj syntaxi a překlepy.
možná místo (.+?) by bylo efektivnější (.*)
Ulet
Profil *
Já bohužel nerozumím jQuery, ale předpokládám že funkce html rozezná html tagy. Což sice u tohoto divu je pravda ale něktré části kódu který hledám je ohraničen např. v harnatých závorkách nebo i jinak na což jsem regulérní výrazy našel jako ideální řešení :-)
greeny
Profil
jQuery je knihovna pro javascript...
var content // proměnná, do který se to vkládá
= $('#id_tagu') //najde prvek s id = id_tagu
.html() //vrátí obsah prvku

Popiš mi prosím detailněji problém... Máš nějaký HTML kód, ve kterém chceš přes PHP nalézt prvek <div class="nejaka_trida">BlahBlah</div> a nějak dostat jeho obsah?

Dalo by se to pak taky udělat přes PHP...
$content; // proměnná ve které je obsah stránky

$casti=explode("<div class=\"nejaka_trida\">", $content); //rozdělí obsah přes ten tag
$if(isset($casti[1]))
{
  $text=explode("</div>", $casti[1]);
  echo $text[0]; //to co hledáš
}
else
{
  //nenalezen tag
}
Má to jedinnou vadu, v tom textu vevnitř nesmí být </div>
Ulet
Profil *
Ok popíšu to lépe mám soubory s kódem a vzhledem k tomu že jich je hodně potřeboval bych nějak automaticky z každého danný kód vypsat. Ve všech případech je danný text ohraničen stejně.
např.:
soubor1.txt má obsah:
BVasdasdas as<div class="nazev_tridy">Text který potřebuji vypsat</div> dasdas as da [v]Dalsi text ktery potrebuji ziskat[/v] asd da df da sd d fsd fasd afsd <b>Zase nejaky potrebny text</b>ad asdas dsasa as as
soubor2.txt má strukturu úplně stejnou (co se těch tagů <div> [v] <b> týče) pouze je jiný text o který mi jde.
Výpis bych potřeboval v nějakém logickém formátu např oddělit pomocí uvozovek, to vše tak nějak napsané mám jde mi jen o to tu část textu PHP nějak vydfinovat:
Text který potřebuji vypsat;Dalsi text ktery potrebuji ziskat;Zase nejaky potrebny text


V zkratce ze souboru s obsahem:
BVasdasdas as<div class="nazev_tridy">Text který potřebuji vypsat</div> dasdas as da [v]Dalsi text ktery potrebuji ziskat[/v] asd da df da sd d fsd fasd afsd <b>Zase nejaky potrebny text</b>ad asdas dsasa as as
potřebuji dostat:
Text který potřebuji vypsat;Dalsi text ktery potrebuji ziskat;Zase nejaky potrebny text


Ale nemusíš se trápit s kompletním scriptem jde opravdu jen o to jak správně najít v souboru ten danný text ohraničený <div> [v] <b> atp.
greeny
Profil
Předpokládám, že v každém souboru se můžou vyskytovat každý tag pouze jednou

$files; //proměnná obsahující souboy (pole)

foreach($files as $file)
{
  $string=file_get_contents($file); //načte soubor

  //odsud opakuj pro každý tag co hledáš  
  $pos1=strpos($string, '<tag ktery hledam>'); //najde pozici počátku
  $pos2=strpos($string, '</tag ktery hledam>'); //najde pozici ukončení
  
  //tady ještě kontrola na $pos1 a $pos2 jestli sou false
  
  $cast=substr($string, $pos1+DELKA_TAGU_KTERY_HLEDAM, $pos2-$pos1); //vykrojí to obsah (možná +-1 až 2 znaky, je potřeba otestovat)

  echo $cast; //to je to co hledáš ;)
}

Je to psaný narychlo a můžou v tom být chyby, ale mohlo by to zabrat...
Velda
Profil
Ulet:
Lépe uděláš, když uvedeš konkrétní kód, který ti nefunguje a pak ho tady na fóru zvýrázníš pomocí pre BB tagu. Ilustrace pomocí svéhlavého kódu, který si nějak vymyslíš není moc dobrá.
Mimochodem jsou to regulÁrní výrazy. Ne, regulérní.
Možná ti pomůže toto:
preg_match('/<div.*>(.*)<\/div>/'); //vybere obsah divu
preg_match('/<b.*>(.*)<\/b>/'); //vybere obsah béčka
preg_match('/\[v.*\](.*)\[\/v\]/'); //vybere obsah véčka
Ulet
Profil *
Tohle je presne co jsem potreboval diky ty lomitka na zacatku a na konci to byl zadrhel :-)
Ulet
Profil *
Aaaaha tak kecam tenhle regulerni vyraz zase funguje jen na hranate zavorky, ostrou to nevzalo na <div>Text</div> vyraz co pises nenajde shodu.


Uz jsem na to dosel htmlspecialchars v kodu asi nebylo idealni :-) omlouvam se priste ho sem postnu cely

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: