RegExp - příklady z praxe
   
   Technologie
   27.07.04
   
  
Regulární výrazy v PHP jsou základem pro snadnou a rychlou manipulaci s textem. Základní věc pro web. V tomto článku bych chtěl uvést pár RegExpů, které používám, předpokládám, že se budou hodit i ostatním.
Syntaxe použití:
$text = preg_replace($from, $to, $text);
Vlastní výrazy:
| From: | To: | Popis: | 
|---|---|---|
| |<br />s*<br />| | nn | záměna dvou po sobě jdoucích BR tagů, i s white space, za enter, následně je to možné použít pro převod na P tagy | 
| /(rn|r)/ | n | převod UNIX-like konců řádků na n | 
| /nn+/ | nn | odstranění 3 a více line-breaks | 
| /n?(.+?)(?:ns*n|z)/s | t<p>$1</p>n | převod line-breaks na formátované odstavce - základní funkce redakčního systému | 
| /&([^#])(?![a-z]{1,8}; )/ | &$1 | převod ampersandu na jeho entitu | 
| /^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[A-Za-z]{2,5}$/ | jednoduchá kontrola emailové adresy | |
| /[b](.*?)[/b]/si | <b>\1</b> | převod pseudo-tagů na tagy | 
| /<%[a-zA-Z]+%>/ | nic | výmaz nepárových <% ..%> tagů | 
| /?$/ | nic | URL bez parametrů | 

 
  
  
  
 
Ty záměny zalomení řádků mi nějak nesedí...
Unix-like je n
DOS-like je rn
p.s. v komentářích je drobná chybka. Při náhledu se dvě zpětná lomítka ukáží jako jedno, a po potvrzení náhledu se ukáží jako dvě....
Převod tří a více n máte špatně. Takhle převádíte dva a více. Správně je to #n{3,}#.
[3] ale ne, je to zcela správně, funkční, a otestováno praxí ;)
[2] jasně, v popisce nemá být UNIX-like tagů, ale Win-like tagů
[3] [4] rADo má pravdu, že je to funkční, Martin Kopta, že je to převod 2 a více na 2. Tedy často zbytečná operace (2 -> 2).
Ten převod unix like tagů je super, přesně to jsem potřeboval :) Teď ještě potřebuji v Perlu doprogramovat rekurzivní převedení všech souborů v adresáři, sám se tomu divím, ale nemohl jsem na to nalézt nástroj. Nicméně linuxový ZIP to pomocí nějakého speciálního parametru umí, tam stačí jen zazipovat soubory a oni se převedou, což je docela fajn feature :)
BTW Na testování regexpových výrazů doporučuji tuto - http://www.weitz.de/regex-c... win32 utilitu, v tom regulární výrazy úplně ztrácejí svojí magii :))
[7] Jestli to budete programovat v Perlu nebylo by lepsi pouzit dos2unix? Pokud teda jedete na Linuxu. V opacnem pripade zase nevim proc to prevadet.
[1] a r je MAC-like ... at to mame pohromade ... ;)
[3] Martine, tvoje lepší RegExp jako komentář uloženy nikde nejsou, pokud chceš, poprosím je zaslat na můj email, samozřejmě je i s kreditem tobě uveřejním. :)