[PHP] regulární výraz - obdoba nl2br()

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Nik 13. 12. 2005 21:07

Potřebuju pomoct s regulárním výrazem, moc se v nich totiž nevyznám. potřebuju nahradit každý konec řádku v textu tagem <br />, ale za jedné podmínky se tam vkládat nesmí a to pokud je ten konec za nějakým tagem, například </li> ale nemůžu přijít na to jak to udělat, přišel jsem na tohle "/(.*^>)(\r\n|\n|\r)/" ale nefunguje to jak by mělo, respektive vůbec, můžete mi poradit, jde mi prakticky o to, aby když je tam >a konec řádku, tak aby to tam <br /> nedoplnilo, jinak v ostatních případech ano

// khihihi: spresneny nadpis
// mbing : Téma přesunuto ● z Programování do Tvorba webových stránek a aplikací.
Nik
Junior

Odeslat příspěvekod khihihi 13. 12. 2005 22:38

nieco
Kód: Vybrat vše
  $m = preg_replace("/([^>]\r\n)/", "<br />", $m);

taketo? pozor na newline na roznych platformach, \r\n je na windowsoch
Moderátor diskusného fóra Živě.cz ve výslužbě
khihihi
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod Nik 14. 12. 2005 10:38

No tohle sice funguje, ale ne tak jak bych si představoval, za tagy to sice nenapíše br, ale pokud to nahrazuje za nějakým textem, tak to ještě ukousne jeden znak, a to není přípustné
Nik
Junior

Odeslat příspěvekod stefino 14. 12. 2005 11:21

Ja by som to skusil takto:
Kód: Vybrat vše
preg_replace("/(?<!>)(?>\s*)\r?\n/", "\1<br />", $text)

Pre vysvetlenie:
- \r?\n hladame \r\n, alebo \n (myslim, ze \r nema vyznam, ale keby ano, tak potom by mozno bolo lepsie pouzit tvoje (\r\n|\n|\r)
- (?>\s*) je takym malym vylepsenim, aby vyraz zafungoval, aj ked mas za > par medzier (s malou optimalizaciou = Once-only subpatterns vid. manual) - ak sa nepaci, kludne vymaz :)
- (?<!>) hovori o tom, ze pred medzerami (ak su tam nejake) a koncom riadku sa nema nachadzat >, toto je typicky priklad look-behind assertion (vid. manual)
stefino
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků