Reguláris kifejezés
A HupWiki-ből...
Reguláris kifejezés (REGEXP)
- Sok program (főleg szűrők) használ mintaillesztést (pattern matching), mintakeresést (pattern scanning) és mintafeldolgozást (pattern processing). Ilyen esetekben a – legtöbbször szöveges – bemeneti adatok azon részével fog dolgozni a program, amely egy megadott mintának megfelel, azaz a mintára illeszkedik (vagy amire a minta illeszkedik). Az ilyen komplex minták egyik gyakran alkalmazott formája a szabályos avagy reguláris kifejezés (regular expression, regexp, RE).
- A reguláris kifejezésekkel mélyebben a formális nyelvek elmélete (theory of formal languages) foglalkozik.
Reguláris kifejezések tulajdonságai
- Leírás: man 7 regex, man grep, info grep, man awk/gawk, info gawk
- Egy reguláris kifejezés a szövegnek mindig a legkorábban elkezdődő, és ezen belül a leghosszabb részére illeszkedik. Ez a részkifejezésekre is igaz. Az illeszkedő rész a szövegen belül bárhol – akár egy szó belsejében is – előfordulhat, kivéve néhány esetet (pl. ^ és $, ld. következő dia).
- Alapesetben a kisbetűk és nagybetűk különbözőnek számítanak illesztéskor.
- A reguláris kifejezésekben néhány karakternek speciális jelentése van. Mivel ezek közül sokat a shell is speciálisan kezel, így a parancssorban megadott reguláris kifejezést érdemes aposztrófok közé zárni.
- A reguláris kifejezések nem „mindenhatóak”, nem lehet velük minden feltételt leírni! Így pl. belátható, hogy nem létezik olyan reguláris kifejezés, amely csak olyan szövegre illeszkedik, amely pontosan N db „a” betűt és ugyancsak N db „b” betűt tartalmaz, minden pozitív N-re. (Egy konkrét N esetén egy borzasztó hosszú reguláris kifejezést ugyan meg lehet adni, de az általános esetben ez nem lehetséges.)
Reguláris kifejezések felépítése
- Elemi kifejezések (atomok):
- (KIF): csoportosítás (műveleti sorrend felülbírálása), KIF-re illeszkedik
- ( ): az üres szóra illeszkedik
- [HALMAZ]: A halmaz bármely karakterének egy példányára illeszkedik. A halmazt a karakterek egymás mellé írásával adhatjuk meg.
- [ELSŐ-UTOLSÓ]: mint előbb, de itt egy tartományt adunk meg
- [^HALMAZ]: a halmazban nem szereplő bármely karakter egy példányára illeszkedik (a sortörést kivéve)
- .: bármilyen karakter egy példányára illeszkedik (a sortörést kivéve)
- ^: a sor elejére illeszkedik
- $: a sor végére illeszkedik
- \KARAKTER: a \ után írt speciális jelentésű karaktert közönségesként kezeli
- KARAKTER: bármely közönséges karakter saját maga egy példányára illeszkedik
- Összetett kifejezések:
- KIF1KIF2 (két kifejezés egymás mellé írása): Összefűzés, konkatenáció (concatenation). Olyan szövegre illeszkedik, amelynek első fele KIF1-re, második fele KIF2-re illeszkedik. Több kifejezést is összefűzhetünk.
- KIF1|KIF2|…: Logikai MEGENGEDŐ VAGY (diszjunkció), alternáció (alternation). Olyan szövegre illeszkedik, amely legalább az egyik kifejezésre (alternatívára) illeszkedik.
- ismételt illesztés, ismétlésszám megadása, iteráció (repetition, iteration):
- KIF*: KIF akárhány egymást követő példányára illeszkedik (0 is)
- KIF+: KIF legalább 1 egymást követő példányára illeszkedik
- KIF?: KIF 0 vagy 1 példányára illeszkedik (azaz KIF opcionális)
- KIF{I}: KIF pontosan I egymást követő példányára illeszkedik
- KIF{I,}: KIF legalább I egymást követő példányára illeszkedik
- KIF{I,J}: mint előbb, de legfeljebb J példányra illeszkedik (I ≤ J)
- Műveleti erősség csökkenő sorrendben: iteráció, konkatenáció, alternáció