ARCHIV |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
PHP (22) - Regulární výrazyPHP obsahuje nástroje pro práci s regulárními výrazy. Ukažme si, jak tyto funkce použít v praktickém programování. Pokud jste na PHP přešli z ASP (jako kdysi já) pravděodobně Vám regulární výrazy nic neříkají. A přitom jsou tak zábavné. Podívejme se, jak celá ta věc funguje. Název "výrazy" je trochu matoucí. V díle seriálu
o výrazech jsme prohlásili, že výraz je cokoli, co má hodnotu.
Regulární výrazy jsou naproti tomu jen vžitým pojmenováním mechanismu,
který nám umožňuje pracovat s řetězci a maskami. Nejlepší bude opustit
šedivou teorii a vrhnout se hned na nějaké příklady. Mějme například masku "Petr". Této masce vyhoví řetězce "Petr je borec", "Je doma Petr?" i "Honza, Petr a Pavel", protože všechny obsahují slovo Petr. Výraz "Franta je taky borec" pochopitelně masce nevyhoví, neb slovo Petr neobsahuje. V PHP přesně na tohle testování existuje funkce ereg, která vrací TRUE nebo FALSE pro případy, kdy řetězec vyhoví nebo nevyhoví masce: <? To bylo jednoduché. Síla regulárních výrazů však spočívá v něčem
trochu jiném. Teď budeme postupovat tak, že nejdřív si vysvětlíme, co
všechno lze použít pro definici masky, pak se podíváme na funkce v PHP
s maskami pracující a nakonec si ukážeme na nějaké praktické příklady. MaskySituaci kolem regulárních výrazů komplikuje fakt, že maska může obsahovat takzvané metaznaky. Některé častější jsem se pokusil shrnout do tabulky:
Existují ovšem i další metaznaky, které si můžete nastudovat v
manuálu. Většinou Vám tyto budou stačit. Pochopitelně, že v jedné masce
může být více metaznaků, čímž mohou regulární výrazy extrémně nabýt na
složitosti (a síle). PHP a funkce pro regulární výrazyO funkci ereg, která vrátí TRUE v případě, že daný řetězec vyhovuje
masce, jsme již psali. Funkce ereg_replace
funguje tak, že části
řetězce vyhovující masce nejen pozná, ale nahradí jiným řetězcem. Její
použití si ukážeme v závěru. Funcke ereg i ereg_replace rozlišují
velikost písmen. Existují funkce eregi a eregi_replace,
které provádějí
totéž jako jejich protějšky, ale velikost písmen přitom nerozlišují. Konečně existuje funkce split (a spliti
nerozlišující velikost
písmen) pro dělení řetězce maskou. Výsledkem je pole řetězců vzniklých
tímto rozdělením a funkce se svojí filozofií podobá funkci explode,
kterou jsme již v tomto seriálu popisovali. Ony existují ještě další funkce pro práci s regulárními výrazy v
PHP, stejně jako existují i další masky. Pojďme se ale nyní podívat,
jak nám taková kupa nových informací může nějak pomoci v praktických
příkladech. PraxeV praxi například budete chtít zjistit, jestli se dá zadaný řetězec chápat jako celé číslo. K tomu byste mohli využít něco jako: <? Celé je to založeno na výsledku funkce ereg a jeji vyhodnocování
bychom mohli číst následovně (v závorkách uvádím zápis toho, co bylo
právě řečeno, jako metaznak): Abych jakožto funkce ereg vrátila TRUE,
musel by řetězec $cislo nějak vypadat. Měl by začínat (^) znakem plus (\+) nebo ([]) mínus (\-), který tam bude maximálně jednou
(?). Pak musí následovat
některá z číslic ([1234567890]),
což je věc, která se může opakovat, ale nejmíň jednou (+) tam být musí. Tím celá záležitost
musí končit ($). Hezké, že? Nebo budete chtít testovat, jestli předaný řetězec může představovat platnou e-mailovou adresu. Třeba to bude vypadat nějak takhle: <? Zase vysvětlení: Výraz by měl začínat (^) libovolným znakem (.), který se může opakovat, ale
minimálně jednou tam být musí (+).
Pak bude zavináč, pak opět jeden nebo více znaků (.+) a konečně doslovná tečka (\.) a nějaké ty znaky (.+). Tím to celé končí ($). Pozn.: Není to tak úplně
jednoduché. RFC definuje daleko složitější věci, které mohou
představovat platnou e-milovou adresu, ale jako příklad už by to nebylo
tak názorné. A ještě jeden příklad do třetice. Slibuji, že už to nebude tak složité. Pomocí ereg_replace nahraďme všechna místa s více mezerami jen jednou mezerou: <? Neboli: Všechny výskyty řetěce, který obsahuje nejméně (+) jednu mezeru, nahraď jednou
mezerou. Ono to skutečně funguje. Nechte si zobrazit zdrojový kód
stránky v prohlížeči, než to začnete považovat za nefunkční kus kódu. Pokud máte nějaké další příklady použití regulárních výrazů (nejlépe z praxe), uvítám jejich uvedení v diskusi. Sám jsem v PHP mnoho jiných příkladů než ty výše uvedené neviděl.
Související články
Předchozí Celou kategorii (seriál) Další
PHP (1) - Historie a budoucnost
PHP (2) - Jak to funguje PHP (3) - Instalace PHP (4) - Základy syntaxe PHP (5) - Příkaz Echo; formátování kódu PHP (6) - Typy proměnných PHP (7) - Pole PHP (8) - Výrazy, konstanty, inkrementace PHP (9) - Přetypování proměnných PHP (10) - Logické výrazy a operátory PHP (11) - Operátory porovnání; priorita operátorů PHP (12) - Podmínky PHP (13) - Příkazy cyklu PHP (14) - Cyklus for PHP (15) - Funkce PHP (16) - Vyrobme si kalendář PHP (17) - Dokončujeme kalendář PHP (18) - Funkce pro práci s poli PHP (19) - Objekty PHP (20) - Objekty podruhé PHP (21) - Vkládání souborů PHP (23) - Neztraťte se ve funkcích PHP (24) - Pracujeme s formuláři PHP (25) - Formuláře - nikomu nevěřte PHP (26) - Formuláře na sto způsobů PHP (27) - Příklady na formuláře PHP (28) - Chybovati je lidské PHP (29) - Soubory a adresáře PHP (30) - Počitadlo pomocí souborů PHP (31) - Upload a download souborů PHP (32) - Příklad na BLOG PHP (33) - HTTP hlavičky PHP (34) - Úvod do databází PHP (35) - Uložení dat v databázi PHP (36) - Připojujeme se k MySQL PHP (37) - Tvorba tabulek v MySQL PHP (38) - Dolujeme data z MySQL PHP (39) - Zobrazujeme a stránkujeme data PHP (40) - PHP a vkládání záznamů do databází PHP (41) - Měníme data v databázích PHP (42) - Odstraňujeme databázová data PHP (43) - MySQL rychleji a rychleji PHP (44) - MySQL ještě rychleji PHP (45) - Jsou data v databázi v bezpečí? PHP (46) - Importujeme data do databáze PHP (47) - Exportujeme data PHP (48) - Práce s binárními daty (BLOB) PHP (49) - Kam kráčíš, MySQL? PHP (50) - Ověřování uživatelů PHP (51) - Přenos dat mezi stránkami PHP (52) - Cookies PHP (53) - Sessions PHP (54) - Dodržování webových standardů PHP (55) - Odesílání e-mailů PHP (56) - Tisk a PDF PHP (57) - XML PHP (58) - XML lépe a radostněji PHP (59) - zapisujeme XML PHP (60) - Rozsáhlejší projekty 1. PHP (61) - Rozsáhlejší projekty 2. PHP (62) - Rozsáhlejší projekty 3. PHP (63) - Rozsáhlejší projekty 4. PHP (64) - Ladění kódu PHP (65) - Ladění kódu 2. PHP (66) - PHP debugger PHP (67) - Zdroje informací o PHP PHP (68) - Stavíme portál PHP (69) - Stavíme portál 2. PHP (70) - Registrace uživatelů na portálu PHP (71) - Přihlašování uživatelů na portál PHP (72) - Hrátky s uživateli PHP (73) - Frontend a backend PHP (74) - Administrátorské rozhraní portálu PHP (75) - Pokračujeme na portále PHP (76) - Zobrazujeme data na portále PHP (77) - Portál, databáze a relace PHP (78) - Informační obsah portálu PHP (79) - Triky s formuláři a ergonomie webu PHP (80) - Administrace diskografie hudebního portálu PHP (81) - Uživatel versus programátor PHP (82) - zabezpečení vstupů formulářů PHP (83) - Ukládání textů písní na hudebním portále PHP (84) - Ještě k registraci PHP (85) - ukládání souborů do databáze na portálu PHP (86) - zobrazení dat a stahování soborů pro registrované PHP (87) - finišujeme portál PHP (88) - provoz ve Windows PHP (89) - cesta do hlubin php.ini PHP (90) - Poťouchlé konfigurační volby PHP (91) - php.ini potřetí a naposledy PHP (92) - funkce pro interakci s operačním systémem PHP (93) - příkazový řádek PHP (94) - GUI PHP (95) - GUI podruhé PHP (96) - (ne)bezpečné PHP PHP (97) - bezpečnost ještě jednou PHP (98) - PHP 5. PHP (99) - Budoucnost PHP PHP (100) - Závěr PHP (101) - Apríl: Příklady z praxe php rewrite Byte order mark a PHP Předchozí Celou kategorii (seriál) Další Ke stažení jako HTML nebo jako PDF.
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |