Ahoj, potřeboval bych poradit. Snažím se naučit regulární výrazy, a každou chvíli narazím na problém. Tak třeba tenhle řeším už asi dva dny:
Mám text a pomocí reg.vyr. chci odstranit všechny html tagy, tzn znaky mezi "<" a ">". Vím že existuje fce strip_tags(), ale tenhle příklad uvadím čistě kvůli problematice s reg. výrazy.
Takže:
<?php
$pokus='nějaký text <tag1> další blbý text <html tag2> blablabla <další tag> atd. ...';
$pokus=eregi_replace("<.*>","",$pokus);
echo '<textarea rows="6" cols="80">'.$pokus.'</textarea>';
?>
...tento skript mi smaže šechno mezi PRVNÍM "<" a POSLEDNÍM ">" ! Jak mám PéHáPéčkům říct aby jako reg.vyr ".*" brali CO NEJKRATŠÍ možný řetězec?
Moc děkuju za vysvětlení, snad se tu najde někdo kdo tak těžkou věc jako reg. výrazy chápe :-)
<HTML>Z hlavy napr:
$pokus=eregi_replace("<[^>]+>","",$pokus);
neboli reg. vyraz zacne znakem < a cte minimalne 1 jiny znak dokud nenarazi na > , pak precte i jeho a nahradi to za prazny retezec
to je za pouziti POSIXoveho vyrazu jak jsi chtel.. jinak lepsi je pouzit PERL-compatible, umi toho vic..
Tvuj zapis: <.*> je typyckou ukazkou nenasytnosti reg. vyrazu kdy berou "do tecky" tolik znaku kolik je jen mozne a nekonci na nejkratsim moznem retezci jak rikas.
Od toho tu je modifikator /U v perl-compatible a zapis pak vypada nasledovne:
$pokus=preg_replace("/<.+>/iU","",$pokus);
neboli /U znaci ze nechceme "nenasytnou" vlastnost a /i rika ze jde o non-case sensitive.
Jinak reg. vyrazy nema cenu si nejak zasadne pamatovat, od toho je tu dokumentace. Dulezite je znat jejich vlastnosti a to jakym zpusobem hledaji.</HTML>
Wow, díky o tom /U jsem nikde nečetl, a to už jsem v pár seriálech a návodech k PHP hledal :-)
Ještě jedna věc, zkoušel jsem stejným způsobem smazat komentáře, ale zdá se i že tam dělají nějaký binec mínusy v "-->"
<?php
$pokus='nějaký text <!--tag1--> další blbý text <!--html tag2--> blablabla <!--další <b>tag</b>--> atd. ...';
$pokus=eregi_replace("<!--[^(-->)]+-->","",$pokus);
echo '<textarea rows="6" cols="80">'.$pokus.'</textarea>';
?>
...tímhle se smažou jen první dva komentáře. Třetí, ve kterém je html tag <b></b> se nesmaže a zůstane tam celý tak jak je.
Díky :-)
<HTML>No, takovych problemu by jsme tu resili do nekonecna :)
Nasel jsem peknou serii clanku o reg. exp. na:
http://www.regularnivyrazy.info/serialy.html
Jinak vzdy pri problemech s vyrazy, kdyz budes nadavat proc to nefunguje kdyz to ma fungovat je nutnost mit po ruce RewriteLog ktery si zapnes v php.ini a nastavis RewriteLogLevel (mozna to bude trosku jinak, nevim presne) na tusim 9 cili na maximum... pak se jen podivas do logu a vidis presne jak je vyraz rozebiran a jak se s nim pracuje + kde je chyba.
Jinak tusim ze logovaci soubor se myslim neumi vyvorit a musis jej vytvorit rucne aby se do nej mohlo zapisovat (ale mozna se pletu)</HTML>