Regulární výrazy

4 příspěvky

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. 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 :-)
  2. <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>
  3. 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 :-)
  4. <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>

← Zpět na všechna témata