RegExp - příklady z praxe

MyEgo.cz

home foto blogy mywindows.cz kontakt

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}; )/
&amp;$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ů

Komentáře

  1. 1 dgx 27.07.04, 10:07:23
    FB

    Ty záměny zalomení řádků mi nějak nesedí...

    Unix-like je n
    DOS-like je rn

  2. 2 dgx 27.07.04, 10:07:24
    FB

    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ě....

  3. 3 Martin Kopta 27.07.04, 10:07:27
    FB

    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,}#.

  4. 4 Radek Hulán 27.07.04, 10:07:36
    FB

    [3] ale ne, je to zcela správně, funkční, a otestováno praxí ;)

  5. 5 Radek Hulán 27.07.04, 10:07:50
    FB

    [2] jasně, v popisce nemá být UNIX-like tagů, ale Win-like tagů

  6. 6 dgx 27.07.04, 10:07:57
    FB

    [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).

  7. 7 markon 27.07.04, 11:07:32
    FB

    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 :))

  8. 8 PePPer 27.07.04, 01:07:21
    FB

    [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.

  9. 9 lolek 27.07.04, 03:07:22
    FB

    [1] a r je MAC-like ... at to mame pohromade ... ;)

  10. 10 Radek Hulán 27.07.04, 03:07:23
    FB

    [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. :)