![]() ![]() |
ARCHIV |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() ![]() ![]() ![]() |
|
Metaznak |
Znamená |
Výrazu: |
Vyhoví |
Nevyhoví |
^ |
Začátek řetězce |
^Petr | Petr je borec Petr není borec |
Borec je Petr Franta a Petr jsou borci |
$ |
Konec řetězce |
PC$ |
Mám PC Pracuji na PC |
Moje PC je rozbité PC má dnes každý |
. |
Libovolný znak |
s.x |
sex six |
tix sad |
* |
Předchozí znak se smí
libovolněkrát opakovat (i nulakrát) |
s*t |
prst půst prut |
prase |
+ |
Předchozí znak tam bude
minimálně jednou |
s+t |
prst srst |
prut |
? |
Předchozí znak tam bude maximálně jednou | s?t |
prejt prst psst |
síť |
[] |
Libovolný znak ze znaků v závorce |
[0123456789] |
12 356 8 kusů |
kusy kila litry |
() |
Všechny znaky ze znaků v závorce |
(obec) |
obecný obecní všeobecný |
věcný jablečný všeobjímající |
| |
Rozdělení na podvýrazy |
A|B |
Astronaut Babička |
edém čistě |
\ |
Následující metaznak bude chápán
jako znak |
\+ |
Vše, co obsahuje "+" |
Co neobsahuje "+" |
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).
O 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.
V 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:
<?
function JeCeleCislo ($cislo)
{
return ereg("^[\+\-]?[1234567890]+$",$cislo);
}
echo (integer) JeCeleCislo ("1");
echo (integer) JeCeleCislo ("-6");
echo (integer) JeCeleCislo ("3.5");
echo (integer) JeCeleCislo ("4 kusy");
?>
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:
<?
function JeEmail ($cislo)
{
return ereg("^.+@.+\..+$",$cislo);
}
echo (integer) JeEmail ("nekdo@neco.cz");
echo (integer) JeEmail ("nekdoneco.cz");
echo (integer) JeEmail ("@neco.cz");
echo (integer) JeEmail ("neco.cz");
echo (integer) JeEmail ("nekdo@necocz");
echo (integer) JeEmail ("nekdo@neco.");
?>
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:
<?
$retezec= "Mám řetězec se zbytečně mnoho
mezerami, že ????";
echo $retezec."<BR>\n";
echo ereg_replace(" +", " ", $retezec);
?>
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.
Příspívat do diskuze mohou pouze registrovaní uživatelé. |
28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
31.7.2023 14:13 /
Linda Graham
iPhone Services
30.11.2022 9:32 /
Kyle McDermott
Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš
Re: zavináč
2.12.2018 23:56 /
František Kučera
Sraz
5.10.2018 17:12 /
Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?