1 / 11

Reguláris kifejezések

Reguláris kifejezések. bevezető. A reguláris kifejezés  (angolul regular expression ) egy olyan, bizonyos  szintaktikai  szabályok szerint leírt  string , amivel meghatározható stringek egy  halmaza. Nevének rövidítésére gyakran a  regexp  vagy  regex  kifejezés használatos.

tulia
Télécharger la présentation

Reguláris kifejezések

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Reguláris kifejezések

  2. bevezető • A reguláris kifejezés (angolul regularexpression) egy olyan, bizonyos szintaktikai szabályok szerint leírt string, amivel meghatározható stringek egy halmaza. Nevének rövidítésére gyakran a regexp vagy regex kifejezés használatos. • A reguláris kifejezéseket sok szövegszerkesztő illetve segédprogram  használja, főleg szövegek keresésekor vagy szövegek bizonyos minták szerinti kezelésekor. • A reguláris kifejezéseket a jelsorozatokkal, stringekkel való műveleteknél több programozási nyelv is használja, illetve támogatja. Például a perl és atcl is rendelkezik direkt reguláris kifejezések elemzésére szolgáló szintaktikai elemzővel. A különböző unixdisztribúciókbanlévő segédprogramok jelentős része (beleértve a sed szövegszerkesztőt és a grep szűrőt) támogatta először a reguláris kifejezések használatát

  3. alapkoncepció • A gyakran mintának nevezett reguláris kifejezés a jelsorozatok, stringek egy halmazát határozza meg. A minták használatával tömören megadhatók halmazok leírásai annélkül, hogy az összes elemüket fel kellene sorolni. Tegyük fel például, hogy egy halmaz a következő jelsorozatokat tartalmazza: Handel, Händel, és Haendel. Leírhatók-e a halmaz elemei a H(ä|ae?)ndel mintával (más szavakkal: mondhatjuk-e, hogy a mintához mindhárom string illeszkedik)? Amint az a későbbiekből kiderül, általában azonos halmazok különböző mintákkal is leírhatóak. • A legtöbb formalizálásnál a következő operátorok használatával konstruálhatók meg a megfelelő reguláris kifejezések.

  4. választás • A függőleges vonal (|) a lehetséges alternatívákat választja el. Például a „kap|kép” minta alternatívákhoz illeszkedik a kap vagy a kép jelsorozat is. • csoportosítás • Zárójelek az operátorok hatáskörének elsőbbségének meghatározására szolgálnak. Például, a kap|kép és k(a|é)p minták különbözőek, de ugynazok a jelsorozatok illeszkednek hozzájuk (kap és kép). • mennyiség jelzés • A mennyiség jelző egy karakter, vagy csoport után azt határozza meg, hogy hányszor fordulhat elő a megelőző kifejezés. A leggyakoribb mennyiség jelzők a ?, a * és a+: • ? • A kérdőjel jelzi, hogy a megelőző kifejezés csak 0 vagy 1 esetben fordulhat elő. Például, a colou?r minta összeillik a color és a colour jelsorozatok közül bármelyikkel.

  5. A csillag jelzi, hogy a megelőző kifejezés akárhány esetben fordulhat elő (beleértve a nullát is). Például, go*gle mintával összeillik a ggle, agogle, agoogle stb. Nagyon fontos, hogy a * értelmezése alapvetően eltér a Windows-beli megszokott értelmezéstől! • + • A plusz karakter jelzi, hogy a megelőző kifejezés legalább 1 esetben fordulhat elő. Például a go+gle mintához illeszkedik a gogle, google stb. (de a ggle nem!). • A fenti konstrukciók egymással kombinálva a különféle formák komplex ellenőrzését teszik lehetővé. • Tehát a H(ae?|ä)ndel és a H(a|ae|ä)ndel érvényes, szabályos minták, és ezen túlmenően, mindkettőhöz illeszkednek a előző példaként megadott jelsorozatok.

  6. Másik példa a előzőekben leírt operátorok kínálta lehetőségek kihasználásra: • Legyen a minta a következő:(nagy ?)*(apa|anya) • A mintához illeszkedik a következő stringek közül bármelyik: apa, anya, nagy apa, nagy anya, nagy nagy apa, nagy nagy anya, nagyapa, nagyanya, nagy nagyapa, nagy nagyanya, nagy nagy nagyapa, nagy nagy nagyanya és így tovább. • A reguláris kifejezések pontos szintaxisa  a változó eszközök és alkalmazások miatt egységesen nem adható meg; a további részleteket lásd a Szintaxis résznél.

  7. A reguláris kifejezések először az automata elmélet és formális nyelvek elmélete (mindkettő része a elméleti számítógép-tudománynak) kapcsán merültek fel. Ezek az elméletek a számítógép működésének modellezésénél (automaták), illetve ezek osztályozásánál és leírásásnál formális nyelvek voltak fontosak. Az 1940-es években Warren McCulloch és Walter Pitts az idegrendszer neuronokkal történő modellezésének leírásához használt egy kicsiny, egyszerű automatát. A matematikus Stephen Kleene ugyanezt a modellt matematikai jelölésekkel, az úgynevezett reguláris halmazok alkalmazásával írta le. Ken Thompson ezt a jelölési módot építette be az általa készített QED szövegszerkesztő programba. Ez került a Unix szerkesztőjébe (ed) is, ami a reguláris kifejezéseket használó grep elkészüléséhez vezetett. Azóta a reguláris kifejezések széles körben elterjedtek a Unix és a Unix-szerű rendszerek segédprogramjainál, amilyenek például az expr, az awk, az Emacs, a vi, alex és a Perl. • A Perl és a Tcl reguláris kifejezései a Henry Spencer által írt regexből származnak. Philip Hazel kifejleszti a pcre (PerlCompatibleRegularExpressions) alkalmazást, amely képes szimulálni a Perl reguláris kifejezési funkcionalitásait, és több modern eszközben is megjelenik, többek között a PHP-ben, és az Apache-ban.

  8. „Tradicionális” Unix reguláris kifejezések • Az „alap” Unix reguláris kifejezéseinek definíciói a POSIX megjelenésével ugyan elavultak, ennek ellenére széles körben használatosak a visszafelé kompatibilitás miatt. A legtöbb reguláris-kifejezés–felismerő Unix (segéd)program, például a grep és a sed alapértelmezésként használja még ezeket. • Ebben a szintaxisban a legtöbb karaktert literalként kezelik – saját magukhoz illeszkednek csak („a” összeillik „a”-val, „(bc” összeillik „(bc”-hez stb.). A kivételek az illesztő-karaktereknek nevezett metakarakterek.

  9. A különféle beállításoktól, értelmezésektől függően változhat a karakterek sorrend szerinti csoportosítása (például bizonyos beállítások szerint a karakterek sorrendje az abc..yzABC..YZ szerinti, míg más elv szerint az aAbBcC..yYzZ a sorrend) a – nem mindenki által elfogaA különféle beállításoktól, értelmezésektől függően változhat a karakterek sorrend szerinti csoportosítása (például bizonyos beállítások szerint a karakterek sorrendje az abc..yzABC..YZ szerinti, míg más elv szerint az aAbBcC..yYzZ a sorrend) a – nem mindenki által elfogadott – POSIX szabvány meghatározza a karakterek osztályokba vagy csoportokba sorolást a következő tábla alapján: • Például: [[:upper:]ab] meghatározza az összes nagybetűt és a kisbetűs 'a'-t és 'b'-t. • (Egy ASCII kódtáblán színesben mutatja a különböző POSIX osztályokat a következő link http://www.billposer.org/Software/RedetManual/builtincharclass.html.)

  10. Megjegyezzük, hogy a magyar ábécé ékezetes betűinek kezelése esetenként eltérő módon történik, ugyanis a különféle szabványok nem minden esetben térnek ki a különböző országokban használatos, az angol ábécé betűitől eltérő betűk kódolására, kezelésére. Gyakori probléma például, hogy az ábécé szerinti rendezésnél az ékezetes betűk rossz helyre kerülnek, mivel a karakterek kódjai – többnyire – a nem ékezetes karakterek kódjai után következnek, tehát rendezés szempontjából azok valóban „nincsenek sorban”. • dott – POSIX szabvány meghatározza a karakterek osztályokba vagy csoportokba sorolást a következő tábla alapján: • Például: [[:upper:]ab] meghatározza az összes nagybetűt és a kisbetűs 'a'-t és 'b'-t. • (Egy ASCII kódtáblán színesben mutatja a különböző POSIX osztályokat a következő link http://www.billposer.org/Software/RedetManual/builtincharclass.html.)

  11. Megjegyezzük, hogy a magyar ábécé ékezetes betűinek kezelése esetenként eltérő módon történik, ugyanis a különféle szabványok nem minden esetben térnek ki a különböző országokban használatos, az angol ábécé betűitől eltérő betűk kódolására, kezelésére. Gyakori probléma például, hogy az ábécé szerinti rendezésnél az ékezetes betűk rossz helyre kerülnek, mivel a karakterek kódjai – többnyire – a nem ékezetes karakterek kódjai után következnek, tehát rendezés szempontjából azok valóban „nincsenek sorban”.

More Related