PERL – regulérne výrazy
Dnes sa dozviete niečo o najsilnejších zbraniach Perlu – regulérnych výrazoch. Aj keď sú RE v niektorých jazykoch zabudované, zistíte že Perl je na to najlepšie.
Regulérne výrazy
Konečne sme sa dostali k najlepšej vymoženosti Perlu. Regulérne výrazy sú nástroje na prácu s textom. Či už na vyhľadávanie alebo zamieňanie textu. Možno si teraz hovorít nič moc, ale keď sa pustíte pred poriadnu úlohu, na 90% ich využijete.
Vyhľadávanie
Regulérne výrazy sú vždy uzavreté v lomítkach. Ak chceme v nejakom reťazci vyhľadávať alebo zamieňať text pomocou regulérnych výrazov, použijeme za premennou =~:
|
Tento primitívny výraz vráti hodnotu True ak v reťazci $text je slovo jano. Regulérne výrazy sú štandardne case-sensitive (rozoznávajú malé a veľké písmenká). Ďalší príklad vráti True ak sa slovo jano v texte nenachádza:
|
Ak chceme vyhľadávať case-insensitive tak použijeme parameter i:
|
Tento výraz vráti True ak nájde Jano, jano JaNo jaNO…
Nahradzovanie znakov
Nahradzovanie znakov v praxi sa veľmi často nepoužíva. Ale aby ste vedeli o čo ide, tak si aj o tom niečo napíšeme. Tu je prvý príklad:
|
Regulérny výraz sa začína značkou tr, ktorá povie Perlu, že ide o nahradzovanie znakov. Prvý zoznam znakov sa nahradí druhým zoznamom v tom istom poradi. Výraz vráti počet vymenených znakov:
|
$text bude mať hodnotu ABeCedA a $pocet 4. Ak by sme chceli písmenká iba zmazať, tak že by sme v druhom zozname nič nanapísali nič by sa nestalo. Preto pridáme parameter d:
|
$text bude eed. Ďalším použiteľným parametrom je c. Ten spôsobuje výmenu všetkých písmen ktoré niesú v prvom zozname za pozledný znak v druhom zozname:
|
$text je abRcRRa.
Nahradzovanie reťazcov
Nahradzovanie reťazcov budete potrebovať skoro v každom skripte. Tu je vzor:
|
Pri nahradzovaní sa používa predpona s. Slovo1 nahradí slovo2. Výraz vráti počet výmen. Ale ak by ste výraz napísal v takomto tvare, vrátil by vždy 1. Na výmenu všetkých nájdených slov sa používa parameter g (global):
|
$text bude ryby koryto rieka. Aj tu môžete použiť parameter i pre necitlivosť na veľké a malé písmená.
Špeciálne znaky
Určite ste postrehli, že som v príkladoch niekde použil špeciálny znak \n, ktorý znamená enter (nový riadok). Ak nie vyskúšajte pomocou regulérnych výrazov vymeniť znak / za iný. Kým nepoužijete špeciálne znaky nieje šanca. Tu je tabulka špeciálnych znakov:
^ | žačiatok reťazca |
$ | koniec reťazca |
. | ľuboľný znak okrem \n |
+ | aspoň jeden predchádzajúci znak |
* | žiadny alebo viac výskytov predchádzajúceho znaku |
? | žiadny alebo viacej výskytov predchádzajúceho znaku |
[..] | skupina znakov, z ktorých jeden vyhovuje |
[^..] | skupina znakov, z ktorých ani jeden vyhovuje |
(..) | reťazec, ktorý sa ukladá do \1 až \9 |
(..|..|..) | jeden z možností |
{X, Y} | opakovanie predchádzajúceho znaku minimálne X, maximálne Y-krát |
\n | nový riadok |
\t | Tab |
\f | Line Feed |
\r | Carriage Return |
\w | [a-zA-Z0-9_] |
\W | [^a-zA-Z0-9_] |
\d | [0-9] |
\D | [^0-9] |
\s | [ \n\t\r\f] |
\S | [^ \n\t\r\f] |
\b | hranica slova (neakceptuje diakritiku) |
\B | nieje hranica slova |
Okrem špeciálnych znakov existujú ešte aj metaznaky. Metaznaky sú obyčajné znaky pred ktoré sa dáva \. Metaznaky sú: \ | ( ) [ { ^ $ * + ? . @ a aj “ keď ho chcete zadať do reťazca (ale nie v reg. výrazoch).
Teraz si ukážeme využitie zátvoriek a premenných \1 až \9. Je to veľmi výhodné, keď nevieme ktorý prvok zo zoznamu vyhovuje. Dajme si teraz takú fiktívnu úlohu a spravne zvýrazňovanie keywords v zdrojáku. Ako sami uvidítete, riešenie je jednoduchšie než samotná úloha:
|
Teraz o niečo ťažšia úloha. Spravme si kontrolór správnej e-mailovej adresy. Ako vieme email má formát text@text.kod. To by bolo takto:
|
Lenže, email nemôže obsahovať diakritiku a kód krajiny môže byť dvoj alebo trojpísmenkový:
|
Ale my vieme, že existujú aj adresy ja-ty.my@rod-ina.59.com. Takže náš výraz upravíme tak, aby správne skontroloval aj takéto adresy:
|
Dúfam, že ste sa dozvedeli opäť niečo nové. Nabudúce sa podrobnejšie pozrieme na špeciálne premenné.
Pozn. red.: Seriál musel být předčasně ukončen, protože autor nedodal slíbená pokračování. Máte-li zájem v seriálu pokračovat vlastními články, prosíme, kontaktujte redakci.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Aukce CZ domén: Jak vydražit expirovanou CZ doménu?
12. června 2024 -
Certifikáty Entrust ztratí důvěru Google Chrome
8. července 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024