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ó