Reguláris vagy szabályos kifejezések



Hasonló dokumentumok
Reguláris vagy szabályos kifejezések használata

Reguláris vagy szabályos kifejezések

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

Operációs Rendszerek II. labor. 2. alkalom

Reguláris kifejezések 1.

BASH SCRIPT SHELL JEGYZETEK

A sed folyamszerkesztő

További vezérlő valamint számításokat megkönnyítő szerkezetek

Flex tutorial. Dévai Gergely

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

További vezérlő valamint számításokat megkönnyítő szerkezetek

AWK programozás, minták, vezérlési szerkezetek

A sed folyamszerkesztő

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Operációs rendszerek 2 3. alkalom - Reguláris kifejezések, grep, sed. Windisch Gergely windisch.gergely@nik.uni-obuda.hu

Operációs rendszerek. 10. gyakorlat. AWK - bevezetés UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

AWK programozás, minták, vezérlési szerkezetek

Szkriptnyelvek. 1. UNIX shell

AWK programozás Bevezetés

Alapozás. Scriptek, scriptnyelvek. Dinamikus és statikus típusrendszerek. Miért érdemes használni? Perl

Operációs rendszerek gyakorlat

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

7. Laboratóriumi gyakorlat, 1. rész : Vezérlési szerkezetek II.

Operációs rendszerek 1.

S z á m í t ó g é p e s a l a p i s m e r e t e k

Regionális forduló november 19.

Unix-Linux alapok II. gyakorlatvezető: Lutár Patrícia

1. Alapok. #!/bin/bash

Rekurzió. Dr. Iványi Péter

Regionális forduló november 19.

Lekérdezések az SQL SELECT utasítással

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Szűrők Reguláris kifejezések, AWK

Operációs rendszerek gyak.

Forráskód formázási szabályok

6. BASH programozás I.

Formális nyelvek és automaták

Kirakós játék. Döntő február 22. Alakzatok (katalógus) DUSZA ÁRPÁD ORSZÁGOS PROGRAMOZÓI EMLÉKVERSENY 2013/2014

Programozás alapjai. 5. előadás

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

C programozási nyelv

KOVÁCS BÉLA, MATEMATIKA I.


Szövegek C++ -ban, a string osztály

BASH script programozás II. Vezérlési szerkezetek

dr.xlsx A programról Szövegműveletekhez használható függvények

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Szűrők, reguláris kifejezések AWK programozás: minták, vezérlési szerkezetek, tömbök, beépített függvények, reguláris kifejezések

HTML ÉS PHP ŐSZI FÉLÉV

A C programozási nyelv I. Bevezetés

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

H N S A d a t K a p c s o l a t

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

A legfontosabb DOS parancsok

KARAKTERFELISMERÉS AZ EVASYS-BEN

Példa: Aktuális könyvtár tartalmának fájlba mentése, melynek neve az aktuális dátum és idő: ls l > `date+%f_%h-%m`.txt

A C programozási nyelv I. Bevezetés

Bevezetés a programozásba

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Komputeralgebra rendszerek

Tisztelt Ügyfelünk! Változások a 6-os verzióhoz képest:

Komputeralgebra rendszerek

Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás. Az awk

Bevezetés az informatikába

Operációs rendszerek 1.

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Programozás I gyakorlat

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

I. Felzárkoztató Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Chomsky-féle hierarchia

Automaták és formális nyelvek

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Szoftver alapfogalmak

length (s): Az s karaklerlánc hossza, substr(s,m,n): Az s mezőben levő karakterláncnak az m-edik karakterétől kezdődő, n darab karaktert vágja ki.

BEKÉRT ADAT KÉPERNYŐRE ÍRÁSA KÖRNYEZETI VÁLTOZÓK FÁJL REDEZETT KIÍRÁSA KÖNYVTÁRBAN BEJEGYZÉSEK SZÁMA FÁJLBAN SZÁM NÖVELÉSE. #!

cím létrehozása

Számítógép Architektúrák. 4. Gyakorlat

4. Javítás és jegyzetek

32. A Knuth-Morris-Pratt algoritmus

FUNKCIONÁLIS PROGRAMOZÁS

Operációs rendszerek. 2. gyakorlat. Munka állományokkal UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Fordítóprogramok (A,C,T szakirány) Feladatgy jtemény

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

Reguláris kifejezések

GNU/Linux segédprogramok használata 1.0

WEB PROGRAMOZÁS 3.ELŐADÁS. Űrlapok

Apache, MySQL, PHP/Perl NetWare-n

Komputeralgebra Rendszerek

Átírás:

Reguláris vagy szabályos kifejezések 1. Bevezető...1 2. Bővített kifejezések (extended)...2 Egyedi karakterekre való illesztések...2 A. metakarakter...3 A karakter halmaz és a karakter osztály...3 Csoportosítás és alternálás: ( ) és...3 Ismétlés, intervallum...4 Horgonyok...5 A visszautalás...5 A \ karakter további jelentései...6 3. Alap szintű (basic) reguláris kifejezések...7 4. A grep és fontosabb kapcsolói...7 5. A Perl reguláris kifejezései...8 1. Bevezető A reguláris kifejezések leginkább szövegfeldolgozáshoz kötött feladatok kapcsán ismertek. Röviden: egy szövegmintákat leíró nyelvet jelentenek, segítségével rendkívül könnyen oldhatóak meg keresés, helyettesítés, általában szövegek feldolgozáshoz kötődő feladatok. Bár konkrétan, mindennapi gyakorlatként először a UNIX-on kezdték használni őket jelentőségük túlmutat a UNIX eszközein: ma már minden modern programnyelvbe beépítették őket nyelvi vagy könyvtárak szintjén. Ha valahol egy szoftverben szövegek feldolgozását is el kell végezni, akkor szinte egyértelműen ezeket használjuk. Így általánosan programfejlesztés közben, adatbányászatban, címkéket használó nyelvekkel való munkában (XML, HTML) vagy a genetikai adatok feldolgozásában nemcsak használatosak, hanem sokszor az első számú eszközt jelentik. A reguláris kifejezésekkel a UNIX parancsaiban - történelmi okok miatt - legalább három változatban találkozunk. 1. alapszintű (basic) 2. POSIX bővített (extended) 2. Perl kompatibilis - a Perl programozási nyelvben használatos kifejezések, mai változata a Perl 5- ös verziójában jelent meg. Az alapszintű kifejezéseket a régi programokkal való kompatibilitás miatt használjuk. Ezek az alábbi Linux/Unix alatt használatos parancsok: expr, grep alapmódban, sed alapmódban. A bővített kifejezéseket az alábbi esetben használjuk: egrep vagy grep -E kapcsolóval, sed -r kapcsolóval, awk, illetve a különböző programozási nyelvekből, ahol a függvények ilyen kifejezést használnak. Mi a tananyag folyamán megpróbáljuk amennyire lehet - a bővített kifejezéseket használni. A Reguláris kifejezések mesterfokon című, szerző: Jeffrey Friedl, könyvtárban is megtalálható könyv kimerítően tárgyalja a reguláris kifejezéseket, beleértve a különböző programozási nyelvekben (Perl, Java vagy.net-ben) használt variánsokat. 1

2. Bővített kifejezések (extended) Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás Jelölések: a kifejezések jelölésénél, amennyiben előfordulnak, a alábbi karaktereket használjuk: szóköz, tabulátor, a kifejezéseket a pdf illetve html dokumentumokban színesen is kiemelem, mint: ^abc[0-9]. A kifejezésre történő illesztést így emelem ki: abc7xyz. Meghatározás: a reguláris kifejezések egy olyan nyelvet jelentenek amellyel karakterláncokban megtalálható mintákat írunk le. A minták alatt az egymásutáni karakterek egy jellegzetes sorozatát értjük. Így mintáról beszélünk, ha azt mondjuk, hogy három egymás utáni kis a betű és utána egy kettes, de akkor is, ha általánosabban fogalmazunk, mint pl.: három egymás utáni kis betűt egy számjegy követ. A mintákat karaktersorozatokban fogjuk keresni, és első megközelítésben csak az angol nyelv karakterkészletével fogunk dolgozni (gépi nyelvekben lényegében ezek fordulnak elő). Később majd külön foglalkozunk a más nyelven írt szövegek kapcsán használt mintákkal. Ha a minta megtalálható egy szövegrészben, akkor azt mondjuk, hogy a minta illeszkedik a szövegre. Az illesztés (match) fogalmával tulajdonképpen egy keresés eredményére utalunk. Pl. a fent említett minták illeszkednek a aaa2xyxaaa2klm sorozatra. Ilyen kereséskor az első illesztésnek jelentősebb szerepe lehet: sokszor csak az a cél, hogy az elsőt megtaláljuk. Bár ezzel nem fogunk foglalkozni, jó tudni, hogy a keresés véges automatákat használó karakterlánc keresés algoritmusokkal történik. Ezeket egy olyan szoftver komponens hajtja végre a leírt minták alapján amelyet reguláris kifejezés motornak nevezünk. A reguláris kifejezésben karakterek és metakarakterek találhatóak: ezek közösen határozzák meg a keresett mintát. Metekaraktereknek nevezzük azokat a karaktereket amelyek egy reguláris kifejezésben más jelentéssel bírnak, mint a karakter valódi jelenése. Például a ^ karakter amennyiben egy kifejezésben használjuk arra utal, hogy a mintának azt a pontját ahol megjelenik csak a feldolgozott karakterlánc elejére lehet illeszteni. A minta illesztése egy karakterláncra úgy történik, hogy a motor balról jobbra végigjárja a karakterláncot, és megpróbálja illeszteni a mintát. Egy ilyen feldolgozott karakterláncban külön pozíciót jelentenek a karakterek, de mellettük a karakterek közti üres karakterek is. Így például a karakterlánc legelejét nem az első karakter határozza meg, hanem az első karakter előtti üres karakter, és azt is mondjuk ab karakterek között van egy üres karakter. A következőkben úgy tárgyaljuk a reguláris kifejezéseket, hogy a feldolgozott karakterláncról feltételezzük, hogy az egy szöveges állományból jön. Azt is feltételezzük, hogy feldolgozás egy sorra terjed ki. Így a karakterláncunk végét mindig az újsor karakter előtti üres karakter jelenti. Olyan feldolgozásokról, amelyeknél egyszerre több sorban keresünk (multiline keresés) majd később beszélünk. Ezért többnyire azt fogjuk mondani, hogy egy szövegsorban keresünk. Egyedi karakterekre való illesztések c c karakterre illeszkedik, ha c nem metakarakter \c c karakterre illeszkedik ha c metakarakter 2

Így például abc olyan minta amely pontosan az abc sorozatra illeszthető, és a következő láncban ez így néz ki: xyzabcxyzabc. Az a minta bármilyen láncra illeszkedik ha található benne egy a karakter. Ha a ^ egy metakarakter, akkor jelenlétét az a betű előtt ezzel a mintával fogjuk keresni: \^a ami illeszthető az következő sor egy részsorozatára: abc^abc. A. metakarakter A pont bármely karakterre illeszkedik. A mintának az a karaktere ahol előfordul bármilyen karakterre illeszthető. A. illeszkedik akár az a, akár a b karakterekre. A.. minta az ab illetve xy - ra is illeszkedik, az a.c minta pedig azokra ahol az a és c között bármi más áll, mint abc, axc, a c. A karakter halmaz és a karakter osztály A karakter halmaz egy alternatív előfordulást feltételez: például ha a mintában arra szeretnénk utalni, hogy egy bizonyos helyen előfordulhat az a, b vagy c betű (bármelyik a három közül) akkor a karakterhalmazt jelölő metakaraktereket használjuk. Ez egy karakterlista, amely szögletes zárójelben van: [], például [abc]. Rövidíteni karaktersorozatot a - jellel lehet (amennyiben a - jel is a listában van első vagy utolsó karakternek kell tenni, a ] -t pedig elsőnek). [abc] az a vagy b vagy c karaktert jelenti [a-z] egy kisbetűt jelent [0-9] egy számjegyet jelent [-a] az a betűt és a kötőjelet jelenti, mert az itt első helyen áll Ha a lista ^ -el kezdődik, akkor a komplementer karakterhalmazt definiáljuk, [^a-z] jelentése: nem kisbetű (ha a halmazban ^ is van, akkor azt bárhová lehet írni, kivéve az első pozíciót). A metakarakterek is saját magukat jelentik egy karakterhalmazban, nem kell \ jelölést használni. Így [a.] a valódi pont vagy az a karaktereket keresi. az ab[0-9][^xyz] minta jelentése: az ab karakterek után számjegy jön, utána pedig nem következik sem x, sem y, sem z. Példáula wab6czyz sorozat egy részére illeszkedik, de a wab6xzyz -ra nem. Karakterhalmazt megadhatunk [: :] közé zárt halmaznévvel, ezek a nevek a C nyelvből ismert karakterhalmazok vagy osztályok: alnum alfanumérikus karakter; digit számjegy; punct punktuációs karakter; alpha alphabetikus csak betűk; space szóköz; blank üres karakterek: szóköz, sorköz, tabulátor; lower kisbetűk; upper nagybetűk; cntrl kontrol karakterek; print nyomtathatóak. Tehát, pl.: [[:cntrl:]] egy kontrol karaktert jelent, [[:digit:]] egy számjegyet. Csoportosítás és alternálás: ( ) és A mintában a karakterek egymás után következnek, balról jobbra, az után következő karakter 3

sorozatokat szekvenciának nevezzük. A szekvenciákon belüli al-sorozatokat csoportosítani lehet a ( ) metakarakterekkel. Ilyenkor a csoportosított rész egy összefüggő entitást fog jelenteni. Így a x(def)y minta továbbra is a látható x,d,e,f,y karakterek sorozatát jelenti, de a kiemelt (def) részre majd külön hivatkozhatunk. A zárójellel csoportosított kifejezést, akárcsak egy egyedi karaktert atomnak nevezzük. Amennyiben egy mintában alternatív szekvenciákat akarunk definiálni, tehát vagy az egyik vagy a másik illesztését várjuk, akkor a metakaraktert használjuk az alternatívák között. ab cd jelentése: vagy az ab sorozat, vagy a cd állhat azon a helyen, a motor először az ab -t, utána a cd -et próbálja illeszteni. Például ha egy dátumban az október hónap az October, Oct. vagy 10. szövegekkel szerepelhet, akkor abban a kifejezésben ami bármelyikre illeszkedhet ezt írom: October Oct\. 10\., természetesen a teljes dátumra illeszkedő kifejezésben ez majd csoportosítva szerepel: (October Okt\. 10\.). Ismétlés, intervallum Ismétlődő karaktereket (vagy atomokat) az alábbi metakarakterekkel határozhatunk meg: *, +,? amelyeket az ismétlődő karakter után írunk a kifejezésben. Jelentésük az alábbi: * az előtte álló karakter nulla vagy akárhányszor ismétlődhet + az előtte álló karakter legalább egyszer vagy akárhányszor jelenik meg? az előtte álló karakter opcionálisan, tehát egyszer sem vagy pontosan egyszer jelenik meg Ezeket a metakaraktereket kvantoroknak is nevezzük. Látható, hogy nem pontos számú ismétlődést, határoznak meg. A a* minta olyan karakterláncokra illeszkedik amelyekben "akárhányszor" fordul elő az a karakter: tehát nulla, egy, kettő stb. Így illeszkedik az a, aa, aaa, bac karakterláncokra, de a b, c, x karakterláncokra is, mert az a ezekben is "nullászor" megvan. Egy fontos észrevétel a reguláris kifejezés motor működésével kapcsolatban: az a* minta az alábbi láncra így illeszkedik: xyzabbbabbbaxyzaxyz, tehát az illesztés nem a második a karakteren, hanem az elsőtől lehető legtávolabbi a karakteren áll le. Ezért a * kvantort mohó kvantornak nevezzük. A.* minta olyan láncot jelöl, amiben bármely karakter akárhányszor előfordulhat: tehát az üres láncra és a nagyon hosszú, bármit tartalmazóra is illeszkedik. A * mohósága miatt óvatosan kell használni: a.*a például az első a -tól a legmesszebb levőig illeszkedik. Egy idézőjelben levő szöveg kikeresése egy nagy szövegből jellemző példa arra, amikor a mohó kvantort az első lehetséges zárulás pontján le akarjuk állítani: a "abc def" "xyz ghi" szövegben csak akkor tudunk az első idézőjel párra és a benne levő szövegre illeszteni, ha az alábbi mintát használjuk: "[^"]*" : ez olyan karakterekre alkalmazza a * ismétlést amelyek "nem idézőjelek". 4

A + metakarakter előtt álló karakternek legalább egyszer vagy akárhányszor kell előfordulni. Akárcsak a *, ez is mohó: a legtávolabbi lehetséges illesztést keresi. Az a+ minta illeszkedik az a, aa, aaa, aaaa karaktersorokra, de olyanokra amelyekben nem fordul elő az a nem. A? előtt álló karakter opcionálisan fordul elő: a mintának az a? helyén állhat vagy nem a karakter. Például ha az Anna nevet keressük reguláris kifejezéssel, és gyanítjuk, hogy románosan egy n-el is írhatták, akkor a Ann?a kifejezést próbáljuk illeszteni. Az ismétlődést jelölő metakarakterek () -el csoportosított szekvenciákra is alkalmazhatóak (azok is atomok). Így például a ([0-9][a-z])+ kifejezés jelentése: egy számjegy és utána egy kisbetű következik, és ez ismétlődhet egymás után: de a sorozatnak legalább egyszer ott kell lennie. Pontos ismétlődést (intervallumot) a { } metakarakterekkel határozzunk meg. Az alábbi módon használjuk: {n} {n,} az előtte álló karakter pontosan n-szer fordul elő (n egész szám) az előtte álló karakter legalább n-szer de akárhányszor előfordulhat {n,m} az előtte álló karakter legalább n-szer de maximum m-szer fordul elő Így a [0-9]{7} kifejezés pontosan 7 egymásutáni számjegyre illeszkedik, a [a-z]{2,3} pedig két vagy három egymásutáni kisbetűre. Horgonyok A horgonyok segítségével meghatározhatjuk, hogy a minta a szövegnek csak bizonyos helyére illeszkedjen. A ^ metakarakter a sor elejére utal, a $ pedig a sor végére. Pontosabban: ^ a sor elején, $ a sor végén található üres karakterláncot jelentik. A ^abc minta olyan sorokra illeszkedik amelyeknek elején abc lánc áll, a \.$ azokra amelyeknek végén egy pont van. Az ^[a-z]{3}$ sorban pontosan 3 kisbetű van és semmi egyéb. A ^$ kifejezés az üres sort jelenti (a sor elején és végén levő üres karakterlánc egymás mellett van). A visszautalás Sokszor olyan mintákat keresünk, amelyeknél egy előforduló karakter szekvencia megismétlődik a keresett mintában még egyszer. Ilyenkor az első előfordulás helyét megjelöljük, erre a () -el való csoportosítást használjuk, és a \n (n egész szám, tehát \1, \2, stb.) jelöléssel utalunk rá vissza a kifejezésben. Az ([0-9])cd\1 jelentése: egy számjegy, utána cd majd ugyanaz a számjegy még egyszer. Vagy: "a sor végén két ugyanolyan kisbetű mint a sor elején levő kettő, köztük pedig akármi" 5

mintát így írjuk le: ^([a-z]{2}).*\1$. Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás A \1, \2, \3,... jelőlés a zárójelezett részek számára utal balról jobbra: a következő: ([a-z])([a-z])\2\1 minta ilyen láncokra illeszkedik: abbc, xyyx, cddc. A \ karakter további jelentései A reguláris kifejezések terminológiájában "szavakat alkotó" karakterek azok, amelyekből változónevek, azonosítók épülhetnek fel a C vagy más programozási nyelvekben. Ez pontosan az alábbi halmazt jelenti: [a-za-z0-9_] (betűk, számjegyek és a _ ). Ezeket fogjuk a továbbiakban szavakat alkotó (word: a gépi nyelvekben használt szavakról van szó) karaktereknek nevezni. Az alábbi metakarakter szekvenciák azt segítik elő, hogy azonosítókat, kulcsszavakat keressünk ki könnyen egy szövegből. Így a \ bizonyos esetekben, ha utána az alábbi karakterek vannak, az alábbi jelentéssel bír: \b szóhatár (boundary): egy word karakter és egy nem word karakter közti üres lánc \B nem szóhatár: két word karakter közti üres lánc \> üres karakterlánc a szóvégén \< üres karakterlánc a szó elején \w szó (word) alkotó karakter: ugyanaz mint: [a-za-z0-9_] \W nem szó alkotó karakter Az következő szövegben: Alkalmas alma hatalma a \Balma\B kifejezés az első alma-ra, \balma\b a másodikra, \Balma\b pedig a harmadikra illeszkedik. *** Összefoglalva a bővített (extended) reguláris kifejezés metakarakterei: Megnevezés Metakarakter Jelentés Bármely karakter. bármilyen karakterre illeszkedik Kvantorok * az ismétlődés akárhányszor (lehet 0 is)? egyszer vagy egyszer sem fodul elő + legalább egyszer, de akárhányszor Intervallum {n} pont n-szer {n,} legalább n-szer, de akárhányszor {n,m} legalább n-szer, de legfennebb m-szer Horgony ^ a sor eleje előtt levő üres sztringre illeszkedik $ a sor végén levő üres sztringre illeszkedik Csoportosító (...) csoportosítás Alternálás alternálás Karakter osztály [ ] karakter osztály vagy halmaz kijelölő 6

Megnevezés Metakarakter Jelentés Visszautalás \n visszautal egy ()-lel csoportosított sorozatra: \1 az elsőre, \2 a másodikra, stb. Vissza tört sorozatok \b, \B stb. szavak közti határokat jelöl 3. Alap szintű (basic) reguláris kifejezések Néhány hagyományos program esetében használjuk őket: expr, grep, sed (a sed és grep esetében lehet bővítetteket is használni). Ezeknél a kifejezéseknél a?, +, {,, (, és ) helyett a fordított törtvonallal bevezetett változataikat kell használni tehát: \?, \+, \{, \, \(, és \) -t írunk. Így pl:. a "legalább egy a betű" minta így fog kinézni: a\+, az "a vagy pontosan 3 b" pedig a\ b\{3\} ; az a minta amelyben megjelöljük visszautalás miatt a 3 egymás utáni kisbetűt pedig így: \([a-z]\{3\}\). Ezekben nem használhatóak a \ szóhatár szekvenciák. 4. A grep és fontosabb kapcsolói Meghívás: grep kapcsolók minta [ állomány... ] egrep kapcsolók minta [ állomány... ] A grep kikeresi a bementi szöveges állományokból azokat a sorokat amelyekre a megadott minta illeszkedik, és kilistázza őket különböző opciókkal. Hasznossága miatt az egyik leggyakrabban használt program a UNIX rendszereken. egrep formában, vagy -E kapcsolóval használja a bővített reguláris kifejezéseket, mi is így fogjuk használni. A color=auto opcióval indítva a sorok listázásakor színessel írja ki az illesztés helyét, ha a terminál ezt támogatja. Ezt beállíthatjuk egy környezeti változóval is, ehhez írjuk az alábbi parancsot a.bashrc állományunk végére: export GREP_OPTIONS='--color=auto' Az egrep igaz értéket ad vissza a $? -be ha talált legalább egy illesztést, és hamisat ha nem talált: ez felhasználható if szerkezetekben, ha feltételként egy grep-et futtatunk. Például megnézhetjük, hogy a $string változónk első karaktere kis a betű-e: if echo "$string" egrep '^a' >/dev/null 2>&1 then echo kis a -val kezdődik fi Fontosabb kapcsolók: 7

-c megszámolja a találatok számát, ilyenkor nem írja ki a találatokat. -E bővített kifejezésekkel dolgozik -e minta a mintát így is meg lehet adni: feltétlenül így kell megadni, ha a minta jellel kezdődik -P Perl kifejezésekkel dolgozik -f file A mintát egy fájl egymás utáni soraiból veszi. Minden minta találatát keresi. -i kis és nagybetű közti különbség nem számít -L ha több állományban keres, kiírja azok neveit amelyben nincs meg a minta -l ha több állományban keres, kiírja azok neveit amelyben megvan a minta -m szám szám darab találat után leáll, szám egész szám -n a találat elé kiírja annak sorszámát -o csak az illesztést vagy illesztéseket írja ki, több illesztés esetén külön sorba -q nem ír ki semmit. A visszatérési érték jelzi csak, hogy talált vagy nem -r, -R rekurzívan végigjár minden könyvtárat a megadott könyvtár alatt -s nem ír ki hiba üzeneteket azokról az állományokról amelyeket nem tud elolvasni -v inverz kiírás: azokat a sorokat írja ki amelyekben nem volt illesztés -w csak azokat a karakterláncokat tekinti találatoknak amelyek teljes szót alkotnak (elválasztó van a két szélükön) -x csak azokat tekinti találatnak amelyek teljes sort alkotnak 5. A Perl reguláris kifejezései A Perl egy igen népszerű szkript nyelv, az első nagy népszerűségű UNIX alatt használt szkript nyelvek közt található. Szerzője, Larry Wall azért fejlesztette, hogy gyorsan oldjon meg mindennapi feladatokat (Practical Extraction and Report Language) - pl. listák generálását kis adatbázisokból és rendszeradatokból, olyan feladatok elvégzésére amelyet nagy időveszteség pl. C-ben programozni. A nyelv hamar népszerű lett, ma már minden operációs rendszerre van verziója. A nyelv fejlesztése nyílt forráskódú (lásd http://www.perl.org). Az Internet megjelenésének első időszakában a legfontosabb web alkalmazás fejlesztő nyelv volt (CGI programozás). Stílusából több későbbi szkript nyelv ihletődött, mint a PHP, Python vagy Ruby. Ma is kiterjedt felhasználói tábora van (lásd http://www.cpan.org/). A Perl nyelv igen erősen támaszkodik a reguláris kifejezésekre, ezek nyelvi szinten épülnek a Perlbe (az illesztés és karaktersor csere az operátorok közt vannak). A nyelv 5-ös verziójában jelentek meg olyan metakarakterek, amelyek lényegesen lerövidíthetik a kifejezések írását, ugyanakkor bonyolultabb keresést is megengednek. A Perl kifejezései több UNIX parancsban használhatóak (így pl. a grep-ben is: -P kapcsoló) és több szkript nyelvben, mint pl. PHP vagy Python. A Perl valamennyi előzőleg bemutatott, bővített kifejezést felépítő metakaraktert ismer. Ezen kívül 8

még jó néhányat definiál. A Perl a reguláris kifejezéseket két határoló karakter közt adja meg. Ez alapértelmezésben a /, de bármi egyébre ki lehet cserélni. Gyakran használják erre a % jelet is. Egy Perl reguláris kifejezés tehát így néz ki: /a?b+/, ahol a két / jel határoló. De írhatjuk így is ha az célszerűbb: %a?b+%. A kifejezés után egy módosító karaktereket lehet írni, ezek jelentése: i kisbetű/nagybetű nem számít m multiline: több soron történő illesztés (ilyenkor a ^ és $ illeszkedik a belső \n -ekre is) s single line: egy sornak tekint akár több sort is:. illeszkedik a \n -re, ami a normál illesztésnél nem történik meg x a mintában levő fehér karaktereket nem veszi figyelembe az illesztő motor. Ez arra jó, hogy könnyebben kiolvasható mintákat írjunk tehát a: /a?b+/i illeszkedik a 'abb' -re és 'ABb' -re is. Ha pedig így adjuk meg: /a?b+/im akkor az illesztést multiline módban keresi. A Perl metakarakterei közül a legfontosabbak az alábbiak: Metakarakter Jelentése \d és \D A \d egy számjegyet jelent, ekvivalens a [0-9] kifejezéssel. A \D ennek komplementer kifejezése, jelentése: nem számjegy \s és \S A \s fehér karaktert jelent, a \S nem fehér karaktert \w és \W "word" karakterek, azaz [0-9a-zA-Z_], a \W a komplementer halmaz \b és \B szóhatár és nem szóhatár \A A szöveg legelején, függetlenül a multiline üzemmódtól \Z A szöveg legvégén, függetlenül a multiline üzemmódtól, illeszkedik akkor is ha utána még van a szöveg végén egy \n karakter \z A szöveg legvégén, semmilyen karakter nem lehet utána, \n sem A feltételes illesztések megoldására több metakarakter kombinációt használ a Perl, ezek közül megemlítjük: Metakarakter kombináció Előre tekintő metakarakter kombinációk: Jelentése (?=) Ellenőrzi, hogy az illesztés után egy másik reguláris kifejezés illeszkedjék a szövegre. Ez a második illesztés nem fog beletartozni az "illesztésbe", hanem csak vezérli annak helyét. A mohó kvantorok könnyen megállíthatóak ennek segítségével. Pl. /abc(?=de)/ arra az abc -re illeszkedik amelyik után de jön (?!) Az előző ellentettje: ellenőrzi, hogy az illesztés után ne legyen jelen egy olyan 9

karaktersor amelyre a második kifejezés illeszkedik: /abc(?!de)/ Arra az abc -re illeszkedik amelyik után nem jön de sorozat. Vissza tekintő metakarakter kombinációk: (?<=) Ellenőrzi az illesztés előtti karaktersort: annak illeszkednie kell a zárójelben megadott reguláris kifejezésre: /(?<=de)abc/ olyan abc -re illeszkedik amelyik előtt ott van a de karaktersor. (?<!) Az előző feltétel negatív megfogalmazása: /(?<!de)abc/ olyan abc -re illeszkedik amelyik előtt nem illeszthető a de reguláris kifejezés. A fenti feltételes ellenőrzésből egyszerre több is használható a keresett sztring előtt és után. Használatát részletesen lásd itt. 10