Regulárne výrazy III. - 8. časť CGI

V dnešnej (poslednej) časti rozpravy o regulárnych výrazoch v Perli si povieme čosi o modifikátoroch, ktoré sme si doteraz nespomenuli, rovnako sa pozrieme na príkaz nahradenia, ktorý nie je reg. výrazom i keď sa rovnako používa a vyzerá.


Tiež nás čaká príkaz split, ktorý uzatvára množinu základných príkazov úzko spojených s reg. výrazmi.

Modifikátory reg. výrazov

Práca operátorov porovnania (m//) a nahradenia (s///) môže byť ovplyvnená niekoľkými modifikátormi:

Modifikátor Význam
g Hľadá globálne, nachádza všetky výskyty
i Vyhľadáva výskyty bez ohľadu na veľkosť písmen
m Zaobhádza s reťazcom ako s viacerými riadkami
o Prekladá vzor len raz
s Zaobchádza s reťazcom ako s jedným riadkom
x Používa rozšírené reg. výrazy
e Vyhodnotí pravú stranu ako výraz (len s///)

Operátor porovnania m//má nasl. základnú syntax:
m/VZOR/gimosx
/VZOR/gimosx

Operátor prehľadáva výraz na zhodu s reťazcom VZOR a vráti true alebo false. Ak je oddelovačom v tomto oerátore znak "/", úvodné "m" sa nemusí uvádzať. Ako oddelovače môžu byť použité ľubovoľné nealfanumerické znaky.
Reťazec VZOR môže obsahovať vložené premenné. Toto však vyhľadávanie spomaľuje, pretože premenná sa musí zakaždým vyhodnotiť a vzor sa musí znovu preložiť. Pokým chcete toto obmedziť, použite modifikátor /o, ktorý spôsobí že VZOR sa preloží len raz.

Oerátor nahradenia s/// má nasl. základnú syntax:
s/VZOR/NAHRAD/egimosx
Tento oerátor v prehľadávanom reťazci vyhľadá reťazec VZOR a nahradí ho reťazcom NAHRAD. Vráti počet úspešných nahradení (1, pri modifikátore g to môže byť aj viac) alebo hodnotu false pri neúspechu. Opäť platí to isté čo pri operátore porovnania - vkladanie premenných do vzoru a nahradenia spomaľuje nahradzovanie. Pokým zvolíte ako oddeľovač znak ' (apostrof), vo VZORe ani v NAHRADení nebude vykonané vloženie premenných.

Modifikátor /e v operátore nahradenia spôsobí, že nahradzovacia časť (NAHRAD) bude vyhodnotená ako výraz, nie ako reťazec.

Príkaz nahradenia tr///

Ako som už v úvode spomenul, aj keď rovnako vyzerá a používa sa, príkaz nahradenia tr/// nie je v skutočnosti reg. výrazom. Jeho základná syntax je nasledovná:
tr/ZOZNAMPREHLADANIA/ZOZNAMNAHRADENIA/cds
y/ZOZNAMPREHLADANIA/ZOZNAMNAHRADENIA/cds

Tento príkaz prechádza prehľadávaný reťazec znak po znaku a všetky výskyty znakov, ktoré sú obsiahnuté v ZOZNAMPREHLADANIA nahradí zodpovedajúcim znakom zo ZOZNAMNAHRADENIA. Vráti počet nahradených znakov.

Modifikátor Význam
c Doplnok k ZOZNAMPREHLADANIA
c Nájdené nenahradzované znaky vymaže
s Zrazenie viacnásobne nahradených znakov

Pokým je použitý modifikátor /c, budú nahradené všetky znaky, ktoré nie sú obsiahnuté v ZOZNAMPREHLADANIA. Skutočný ZOZNAMPREHLADANIA je teda doplnkom k zadanému.

Pri použití modifikátoru /d budú všetky znaky zo ZOZNAMPREHLADANIA, ktoré nemajú uvedený v ZOZNAMNAHRADENIA svoj ekvivalent, vymazané. Pokým totiž použijete príkaz tr/// v ktorom je ZOZNAMPREHLADANIA kratší ako ZOZNAMNAHRADENIA, bude posledný znak zo ZOZNAMNAHRADENIA opakovaný tak dlho, kým ZOZNAMNAHRADENIA nebude mať rovnakú dĺžku ako ZOZNAMPREHLADANIA. Napr. pri príkaze tr/ABC/ab/ bude písmeno "C" nahradené písmenom "b".

Ak je uvedený modifikátor /s, postupnosti znakov, ktoré majú byť nahradené rovnakým znakom zo ZOZNAMNAHRADENIA sú nahradené jediným týmto znakom.

Príkaz split

Posledným zo základnej skupiny príkazov využívajúcich perlovské regulárne výrazy je príkaz split. Jeho základná syntax je nasledovná:
split /VZOR/, VÝRAZ, LIMIT
split /VZOR/, VÝRAZ
split /VZOR/
split

Tento vo VÝRAZe hľadá rozdeľovacie znaky a v ich miestach VÝRAZ rozdeľuje na podreťazce, ktoré vráti ako zoznam. Oddelovače sú určené opakovaným prehľadávaním VÝRAZu na výskyt reťazca VZOR (VZOR je teda chápaný ako oddelovač).
Pokým je použitý parameter LIMIT, split rozdelí VÝRAZ na max. LIMIT podreťazcov.
Pokým nie je špecifikovaný VÝRAZ, bude prehľadaný a rozdelený obsah premennej $_. Ak je vynechaný aj VZOR, bude vykonané rozdelenie v miestach všetkých prázdnych znakov okrem tých, ktoré sa nachádzajú na začiatku reťazca.

To by bolo o reg. výrazoch v Perli všetko, nabudúce sa pozrieme Server Side Includes (SSI).

Developer,
Stiahnuté z Developer.sk