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?(.+?)(?:n s*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. :)