Reguláris kifejezés

A reguláris kifejezés ( angolul reguláris kifejezés , rövidítés RegExp vagy Regex ) van egy karakterlánc az elméleti számítógép-tudomány , amely leírására használják készlet karakterlánc segítségével bizonyos szintaktikai szabályok. A reguláris kifejezéseket elsősorban a szoftverfejlesztésben használják . A számos programozási nyelv megvalósításán túl sok szövegszerkesztő szabályos kifejezéseket is feldolgoz a " Find and Replace " funkcióban. A reguláris kifejezések egyszerű használata a helyettesítő karakterek .

A reguláris kifejezések szűrőfeltételekként használhatók a szövegkeresésben, ha a szöveget illeszti a reguláris kifejezés mintájához. Ezt a folyamatot mintaegyezésnek is nevezik . Például lehetőség van az összes szó keresésére a szavak listájából, amelyek S -vel kezdődnek és D -vel végződnek anélkül, hogy kifejezetten meg kellene határozni a köztük lévő betűket vagy számukat.

A reguláris kifejezés fogalma lényegében Stephen Kleene matematikushoz nyúlik vissza , aki a reguláris halmaz hasonló kifejezést használta .

Rendszeres kifejezések az elméleti informatikában

Elméleti alapok

A rendszeres kifejezések a formális nyelvek családját írják le, és így az elméleti informatikához tartoznak . Ezek a nyelvek, a szabályos nyelvek , a Chomsky -hierarchia (3. típus) legalacsonyabb és így a leggyengébb kifejezési szintjén vannak . Rendszeres nyelvtanok generálják .

Minden szabályos kifejezéshez tartozik egy véges automata, amely elfogadja a kifejezés által megadott nyelvet. A megfelelő (nem determinisztikus) véges automatát a Thompson konstrukcióval rendelkező reguláris kifejezésből lehet felépíteni . Így viszonylag könnyen megvalósíthatók a reguláris kifejezések. Ezzel szemben minden véges automata számára létezik egy reguláris kifejezés, amely leírja az automata által elfogadott nyelvet. Egy megfelelő reguláris kifejezés konstruálható egy nem determinisztikus véges automatából Kleene algoritmusa segítségével . Kleene algoritmusa általában nagyon hosszú reguláris kifejezéseket állít elő. Az állapot megszüntetése (németül tulajdonképpen: „állapot megszüntetése”) általában rövidebb szabályos kifejezéseket biztosít a gyakorlatban. A legmagasabb (angolra „legrosszabb eset”), azonban mindkét algoritmus visszatér reguláris kifejezések a hossza , és a karakterek számát a mögöttes ábécé és az államok száma a gépben.

szintaxis

A szintaxis pontosan meghatározza a reguláris kifejezések megjelenését.

A reguláris kifejezéseket mindig meghatározott karakterkészlet , az úgynevezett ábécé segítségével határozzák meg . A reguláris kifejezések pontosan három műveleten alapulnak: alternatív, összefűzés és ismétlés. A hivatalos definíció így néz ki:

  1. (az üres készlet speciális szimbóluma ) egy reguláris kifejezés.
  2. minden van (egy karaktert a mögöttes ábécé képviselet) egy reguláris kifejezés.
  3. Ha és reguláris kifejezések, akkor (alternatív), ( összefűzés ) és ( Kleene héj , Kleene csillag) szintén reguláris kifejezések.

A szimbólum helyett alternatívát használnak. Akkor írsz . Alternatív megoldásként van egy operátor szimbólum az összefűzéshez; majd az egyik ír .

Engedélyezhet további állandókat és műveleteket is, feltéve, hogy azok hatása a fent említett alapvető szabályok segítségével is leírható. A szakirodalomban megtalálható többek között a reguláris kifejezés vagy a pozitív Kleenesche boríték , amely rövidítésének tekinthető .

Ha megadja az operátorok elsőbbségét, bizonyos zárójelek nélkül is megteheti. Az elsőbbségi sorrend általában Kleene csillag az összefűzéssel szemben az alternatívával szemben . Ehelyett elegendő a helyesírás .

A beágyazott * operátorok számát csillagmagasságnak nevezzük .

szemantika

A reguláris kifejezések szemantikája pontosan meghatározza a reguláris kifejezések szintaxisának formális jelentését.

A reguláris kifejezés egy hivatalos nyelvet ír le, azaz szavak (karakterláncok) halmazát . A szemantika definíciója ugyanúgy leírható, mint a szintaxis definíciója. Azt a formális nyelvet jelöli, amelyet a reguláris kifejezés határoz meg .

  1. Az üres készlet speciális szimbóluma határozza meg az üres nyelvet.
  2. mert minden igaz
    Az ábécé egy karakterének minden képviselője megadja azt a nyelvet, amely csak ezt a karaktert tartalmazza.
  3. vannak , és a reguláris kifejezések, a következő érvényes:
    A két kifejezés közötti alternatíva leírja azt a nyelvet, amely a két kifejezés által leírt két nyelv egyesüléséből adódik.
    Két kifejezés összefűzése azt a nyelvet írja le, amely csak azokat a szavakat tartalmazza, amelyekben az első kifejezés által leírt nyelvből származó szó előtagként szerepel, és amelynek közvetlenül utána következő toldalék egy szó a második kifejezés által leírt nyelvből.
    A reguláris kifejezések Kleene -héja a leírt nyelv Kleene -héját írja le .

Ha a reguláris kifejezések szintaxis -definíciója is tartalmazza az állandót , akkor annak jelentése: azaz az a nyelv, amely csak az üres szót tartalmazza .

Az üres szó egy hivatalos nyelvű szó ( ), ezért nem szabályos kifejezés. A nyelv tartalmaz csak üres szó, de lehet anélkül, hogy a konstans reguláris kifejezésre leírni, például: . Azonban a vizuális megkülönböztetés nem mindig tenni egy reguláris kifejezés és az ahhoz kapcsolódó nyelven, hogy ahelyett, hogy használják , mint egy reguláris kifejezést a nyelv , a különbséget és a között, és lehet elhagyható.

Példák

Ha a betűből származó ábécé , és ezért az , akkor a következő nyelvek írhatók le a megfelelő reguláris kifejezésekkel:

  • A tetszőleges számból vagy számból álló összes szó nyelve :
    Szintaxist: . Szemantika:
  • Az összes szó nyelve, amely bármely számmal kezdődik és végződik, vagy bármilyen számmal vagy számmal :
    Szintaxist: . Szemantika:
  • Az összes szó nyelve, amely azzal kezdődik és végződik, és csak a kettő közötti számból áll :
    Szintaxist: . Szemantika:
  • A nyelv minden szó, hogy áll a két karakter , és :
    Szintaxist: . Szemantika:

Reguláris kifejezések használata

Ken Thompson ezt a jelölést használta a hatvanas években a qed (a Unix szerkesztő ed. Verziója ) szerkesztéséhez , később pedig a grep eszköz írásához. Azóta sok program és programozási nyelvű könyvtár olyan funkciókat valósított meg, amelyek segítségével reguláris kifejezéseket használhat a karakterláncok keresésére és cseréjére. Ilyenek például a sed , grep, emacs programok, a Perl és a Tcl programozási nyelvek, valamint a szabványos könyvtárak a C , C ++ , Java , JavaScript , Python , PHP , Ruby és a .Net keretprogramozási nyelvekhez . A szövegszerkesztő és az OpenOffice.org Office csomag táblázatai lehetővé teszik a keresést a szövegben található reguláris kifejezések használatával.

A különböző Regexp -implementációk között különbségek vannak a funkcionalitás és a szintaxis között. A programozási nyelvekben a Perl -kompatibilis reguláris kifejezések (PCRE) érvényesültek, amelyek a Perl 5.0 -ás implementáción alapulnak. Ezenkívül a POSIX.2 -ben megkülönböztetünk "alapvető" reguláris kifejezéseket (alapvető reguláris kifejezéseket) és "kiterjesztett" reguláris kifejezéseket (kiterjesztett reguláris kifejezéseket) .

Néhány program, például a Vim szövegszerkesztő , lehetőséget kínál a különböző regexp szintaxisok közötti váltásra.

A reguláris kifejezések fontos szerepet játszanak a forrásszövegek lexikai elemzésében , például fordítókban vagy a szintaxis kiemelésében a szerkesztőkben. Egy lexikai szkenner a forrásszöveget úgynevezett tokenekre (kulcsszavakra, operátorokra, ...) bontja reguláris kifejezések használatával . Mivel a legtöbb programozási nyelv kontextusmentes nyelv , a reguláris kifejezések nem elég hatékonyak a szintaxisuk leírásához. Ezért a fordítókkal követett szintaktikai elemzést általában egy külön program, az elemző végzi .

A rendszeres kifejezések a bioinformatikában is szerepet játszanak. A fehérje -adatbázisokban használják őket a fehérjemotívumok leírására. A reguláris kifejezés

W-x{9,11}-[VFY]-[FYW]-x{6,7}-[GSTNE]-[GSTQCR]-[FYW]-R-S-A-P

leírja például a PROSITE fehérje doménjét . A fenti reguláris kifejezés a következőket mondja: Kezdetben válassza a triptofán aminosavat (egy betűs W kód), majd válasszon 9-11 aminosavat szabadon, majd válasszon V, F vagy Y, majd F, Y vagy W, majd ismét 6-7 aminosav mentes, majd G, S, T, N vagy E, majd G, S, T, Q, C vagy R, majd F, Y vagy W, majd R, majd S, majd P, majd .

Rendszeres kifejezések a gyakorlatban

A legtöbb megvalósítás ma támogatja a kiterjesztéseket, például a hátsó hivatkozásokat. Ezek az elméleti számítástechnika értelmében már nem szabályos kifejezések, mert az így kibővített kifejezések már nem feltétlenül írják le a Chomsky -hierarchia 3. típusú nyelveit .

A következő szintaxisleírások a kiterjesztésekkel együtt járó általános implementációk szintaxisára vonatkoznak, így csak részben felelnek meg az elméleti informatika fenti definíciójának.

A reguláris kifejezések gyakori használata speciális karakterláncok keresése a karakterláncok halmazában. Az alábbi leírás egy (gyakran használt) egyezmény, amely kifejezetten olyan fogalmakat valósít meg , mint a karakterosztály , a számszerűsítés , a linkelés és az összegzés . Itt egy szabályos kifejezést alakítanak ki az alapul szolgáló ábécé karaktereiből a metakarakterekkel kombinálva [ ] ( ) { } | ? + - * ^ $ \ .(esetenként kontextusfüggő), néhány megvalósításban is : ! < =. A karakter metatulajdonsága törölhető egy előző fordított perjelezéssel . Az ábécé összes többi karaktere önmagáért áll.

Karakter literálok

Azokat a karaktereket, amelyeknek közvetlenül (szó szerint, szó szerint) meg kell egyezniük, közvetlenül is megjegyzik. A rendszertől függően lehetőség van a karakter megadására is oktális vagy hexadecimális kóddal ( vagy ) vagy hexadecimális Unicode pozícióval ( ). \ooo\xhh\uhhhh

Egy karakter a válogatásból

A szögletes zárójelek segítségével a karakterválasztás definiálható ( [és ]). A szögletes zárójelben lévő kifejezés ekkor pontosan egy karaktert jelent ebből a kiválasztásból. Ezeken a karakterosztály -definíciókon belül néhány szimbólumnak más jelentése van, mint normál környezetükben. A szimbólum jelentése részben attól függ, hogy milyen kontextusban fordul elő a zárójelben.

Például egy karakterosztály -meghatározás ^ elején található cirkuláris reflex azt jelenti, hogy a karakterosztály negatív (vagy komplementer ). Ha azonban a meghatározásban bárhol máshol találunk egy cirkumflexet, azt szó szerint kell érteni. A kötőjel ( -) jelentése is kontextusfüggő . Ezenkívül a regex motorok (például POSIX és PCRE) néhány pontban különböznek egymástól. Ha -például az osztálydefinícióban két kötőjel között kötőjel van [a-g], akkor azt bisz-kötőjelként kell érteni, azaz egy karakterköz vagy karaktertartomány leírásával az ASCII táblához viszonyítva . A megadott példa ezzel egyenértékű lenne [abcdefg]. A karakterosztály elején vagy végén található kötőjeleket maga a karakter értelmezi.

Példák a karakterválasztásra
[egh] az egyik karakter e, gvagyh
[0-6] számjegy tól 0-ig 6(kötőjelek tartományt jelölnek)
[A-Za-z0-9] bármilyen latin betű vagy szám
[^a] bármely karakter, kivéve a( ^ugyanazt tagadja a karakterosztály elején)
[-A-Z], [A-Z-](vagy [A-Z\-a-z]nem a POSIX szerint) A kijelölés tartalmazza a kötőjelet is, -ha ez az első vagy utolsó karakter a karakterosztály felsorolásában, vagy PCRE esetén, ha a metafunkcióját a kijelölésen belül egy előző fordított perjel törli

Előre meghatározott karakterosztályok

Vannak előre meghatározott karakterosztályok, amelyeket nem minden megvalósítás támogat egyformán, mivel ezek csak rövid formák, és karakterek kiválasztásával is leírhatók . Fontos karakterosztályok:

\d d igit számjegy, azaz [0-9](és esetleg más számok Unicode -ban , pl. bengáli számjegyek )
\D nincs d igit karakter, amely nem számjegy, tehát [^\d]
\w w ord karakter betű, szám vagy aláhúzás, azaz [a-zA-Z_0-9](és esetleg nem latin betűk, például umlautok)
\W nincs w karakter olyan karakter, amely sem betű, sem szám, sem aláhúzás, tehát [^\w]
\s fehér s ütemben általában legalább a szóköz és az osztály vezérlő karakterek \f , \n, \r, \tés\v
\S nincs fehér s ütem karakter, amely nem szóköz, szóval [^\s]

A pont ( .) azt jelenti, hogy (szinte) bármely karakter a helyén lehet. A legtöbb RegExp-implementáció alapértelmezés szerint nem látja a sortöréseket semmilyen karakternek, de ez bizonyos programokban az úgynevezett egysoros módosító segítségével érhető el s(például a /foo.bar/s).

Sok újabb megvalósításban a POSIX utáni szögletes zárójelben is megadhatók osztályok, amelyek viszont szögletes zárójeleket tartalmaznak. Például ezek:

Példák karakterosztályokra, hierarchikusan rendezve
  • [:cntrl:]- vezérlő karakterek. Az ASCII -ben ezek 00a 1Fés 7F(DEL) karakterek .
  • [:print:]- nyomtatható karakterek: [:alnum:], [:punct:]és terek
Megjegyzések:
ZK1A 160 -as Unicode -számú karakter (hexadecimális: A0) (megfelel a HTML -entitásnak & nbsp;), más néven „ védett tér ”, előfordulhat, hogy a [: space:] osztály nem találja meg, és külön kell azonosítani a a kódolási pont .
ZK2A betűk a közös operációs rendszerek területi beállításaitól függenek , azaz a régiótól és a beállított nyelvtől.

Kvantusok

A kvantorok (angol kvantorok , kvantorok vagy ismétlési tényezők ) lehetővé teszik az előző kifejezés engedélyezését a karakterlánc különböző többszöröseiben.

? Az előző kifejezés nem kötelező, egyszer előfordulhat, de nincs rá szüksége, vagyis a kifejezés nulla vagy egyszer fordul elő. (Ez megfelel {0,1})
+ Az előző kifejezésnek legalább egyszer meg kell jelennie, de többször is megjelenhet. (Ez megfelel {1,})
* Az előző kifejezés annyiszor jelenhet meg, amennyit csak akar (még egyszer sem). (Ez megfelel {0,})
{n} Az előző kifejezésnek pontosan n -szer kell megjelennie . (Ez megfelel ) {n,n}
{min,} Az előző kifejezésnek legalább min alkalommal meg kell történnie.
{min,max} Az előző kifejezésnek legalább minimum és maximum többször kell megjelennie.
{0,max} Az előző kifejezés legfeljebb többször jelenhet meg .

A kvantorok az előző reguláris kifejezéshez kapcsolódnak, de nem feltétlenül a talált egyezéshez. Például a+egy „a” vagy „aaaa” kifejezést használnak, de [0-9]+nem csak az ismétlődő azonos számjegyeknek felelnek meg , hanem a vegyes számjegyek sorozatának is, például „072345”.

További példák a következők:

  • [ab]+ megfelel az "a", "b", "aa", "bbaab" stb.
  • [0-9]{2,5}sorban két, három, négy vagy öt számjegynek felel meg, pl. B. "42" vagy "54072", de nem a "0", "1,1" vagy "a1a1" karakterlánc.

Ha egy karakterláncnak csak a keresett mintából kell állnia (és nem csak tartalmaznia kell), akkor a legtöbb megvalósításban kifejezetten meg kell határozni, hogy a minta a QF1 elejétől ( \Avagy ^) a karakterlánc végéig terjedjen ( , vagy ) QF1 . Ellenkező esetben például felismeri az „12345” alláncot is az „1234507” karakterlánc számára. Ugyanezen okból például mindig van találat, mivel minden karakterlánc, különösen az üres szó, legalább 0 -szor tartalmazza az „a” karaktert. \Z\z$[0-9]{2,5}a*

A kvantorok (alapértelmezés szerint "mohó" angol mohó implementálva). Vagyis a reguláris kifejezés a lehető legközelebbi egyezésre van feloldva. Mivel azonban ez a viselkedés nem mindig kívánatos, a kvantorokat sok újabb megvalósításban "takarékosnak" vagy "óvatosnak" (angolul nem kapzsi , vonakodónak ) lehet nyilvánítani . Például egy kérdőjel kerül a Perl -ben vagy a tcl -ben lévő kvantor ?után. A takarékos kvantorok végrehajtása viszonylag összetett és lassú a keresési folyamat során ( visszalépést igényel ). B. sed.

Példa (Perl szintaxis)
Ha feltételezzük, hogy a reguláris kifejezést az A.*B"ABCDEB" karakterláncra alkalmazzuk, akkor "ABCDEB" -nek találja. A "takarékos" kvantor *?segítségével a most módosított kifejezés - azaz A.*?B csak az "AB" karakterlánc - megszakítja az első talált "B" keresését. Az egyenértékű reguláris kifejezés azoknak a tolmácsoknak, akik nem támogatják ezt a mennyiséget A[^B]*B.
QF1A karakterek ^és $a többsoros módban egyeznek , azaz ha az m módosító be van állítva, a sorok eleje és vége is.

Birtokoló viselkedés

A fentebb leírt mohó viselkedés egyik változata a birtokos párosítás . Mivel azonban itt nincs lehetőség a visszalépésre, az egyező karaktereket nem adják ki újra. Éppen ezért az irodalomban is megtalálhatók az atomi csoportosítás , a független részkifejezés vagy a nem visszalépő alminta szinonim kifejezései . Ezeknek a konstrukcióknak a szintaxisa a különböző programozási nyelvek szerint változik. Eredetileg az ilyen részleges kifejezéseket (angolul "subpattern") a Perl -ben fogalmazták meg . Ezen kívül, mivel a Perl 5.10, vannak egyenértékű, már rendelkezésre álló Java birtokos kvantorokkal , , és . (?>Ausdruck)++*+?+{min,max}+

példa
Ha feltételezzük, hogy a reguláris kifejezést az "ABCDEB" karakterláncra A.*+Balkalmazzuk, akkor nem talál egyezést. A reguláris kifejezés feldolgozása során a rész .*+megegyezik a karakterlánc végével. Ahhoz azonban, hogy megtaláljuk a teljes kifejezést, egy karaktert - ebben az esetben a "B" -t - újra ki kell engedni. A birtokos kvantor ezt tiltja az elnyomott visszalépés miatt, ezért nem találunk sikeres egyezést.

Csoportosítások és visszamenőleges hivatkozások

A kifejezéseket kerek zárójelekkel lehet összefoglalni , (és : Például egy "abc" vagy "abcabc" stb. ) (abc)+

Néhány megvalósítás elmenti a csoportosítások talált egyezéseit, és lehetővé teszi azok újbóli felhasználását rendszeres kifejezésekben vagy szövegcserében. Ezek visszahivatkozások (angol visszautalásokra hívják). A jelölést vagy gyakran használják, ahol n megfelel az n . Csoportosításnak. Egy speciális pozíció n = 0, amely általában a teljes reguláris kifejezés egyezését jelenti. \n$n

példa
A keresés és csere a AA(.*?)BBreguláris kifejezés keresés és \1a csere helyettesít minden karakterláncot zárt által AA és BB a szövegben szereplő között AA és BB . Ez azt jelenti, hogy az AA és a BB és a köztük lévő szöveg helyébe az eredetileg AA és BB közötti szöveg lép , így az eredményből hiányzik az AA és a BB .

A visszafelé mutató hivatkozásokat lehetővé tevő reguláris kifejezés értelmezők már nem felelnek meg a Chomsky -hierarchia 3. típusának . A szivattyúzó lemma segítségével kimutatható, hogy az a reguláris kifejezés, amely meghatározza, hogy egy karakterlánc megelőzi -e és követi -e 1ugyanazt a számot, 0nem szabályos nyelv .

Ezen kívül vannak olyan csoportosulások is, amelyek nem generálnak visszamenőleges hivatkozást (angol non-capture ). Ennek szintaxisa a legtöbb megvalósításban (?:) . A Regexp dokumentáció azt jelzi, hogy mindig el kell kerülni a visszamenőleges hivatkozások létrehozását, ha később nem érik el őket. Mivel a hivatkozások előállítása végrehajtási időbe kerül, és helyet foglal a talált egyezés tárolására. Ezenkívül a megvalósítások csak korlátozott számú visszamenőleges hivatkozást tesznek lehetővé (gyakran csak legfeljebb 9 -et).

példa

A reguláris kifejezés \d+(?:-\d+)*felhasználható kötőszóval elválasztott számsorozatok megkeresésére anélkül, hogy az utolsó számsorozatot kötőjellel elválasztva kapnánk vissza.

példa

A formátumban szereplő dátumot formátumba MM/DD/YYYYkell konvertálni YYYY-MM-DD.

  1. A kifejezés segítségével ([0-1]?[0-9])\/([0-3]?[0-9])\/([0-9]{4})kivonjuk a három számcsoportot.
  2. A helyettesítő kifejezéssel \3-\1-\2az egyes csoportok a megfelelő formátumba konvertálódnak.

Alternatívák

A |szimbólummal alternatív kifejezéseket is engedélyezhet.

példa
ABC|abcjelentése "ABC" vagy "abc", de z. B. nem "Abc".

Több karakter

Annak érdekében, hogy támogassa a számítógép azon alkalmazásait, amelyek gyakran kapcsolódnak karakterláncokhoz, általában a következő karaktereket határozzák meg a már említetteken kívül:

^ áll a sor elejére (nem tévesztendő össze ^a karakter kiválasztó segítségével [és ]).
$ a szövegkörnyezet függvényében egy sor vagy egy karakterlánc végét jelentheti, néhány megvalósítást a „\ n” követhet. A tényleges befejezés egyezik \z.
\ ha szükséges, törli a következő karakter meta-jelentését (lásd a karakterek elfedését ). Például a kifejezés (A\*)+lehetővé teszi az "A *", "A *A *" karakterláncokat és így tovább. Ily módon \.kereshet egy „” pontot \is \\.
\b üres karakterlánc a szó elején vagy végén
\B üres karakterlánc, amely nem alkotja a szó elejét vagy végét
\< üres karakterlánc a szó elején
\> üres karakterlánc a szó végén
\n egy sortörés Unix formátumban
\r a sortörés a (régi, azaz mielőtt 1999) Mac formátumban
\r\n egy sortörés DOS és Windows formátum
\t vízszintes lapkarakter
példa
[^ ]$ jelentése: A karakterláncnak legalább egy karakterből kell állnia, és az utolsó karakter nem lehet szóköz.

Körültekintő állítások

Perl 5-ös verzió is bevezetett előretekintő és megjelenés mögött állítások mellett a szokásos reguláris kifejezések (például „előremutató” és „visszafelé tekintő” feltételezéseket vagy kijelentések), amelyek össze kifejezés alatt körülnézés állításokat . Ezek a konstrukciók kiterjesztik a reguláris kifejezéseket azzal a lehetőséggel, hogy kontextustól függő (angolul: "context sensitive") feltételeket fogalmazhatnak meg anélkül, hogy magát a kontextust megfelelőnek találnák. Ez azt jelenti, szeretné megtalálni az összes húrok „Sport”, ahol a húr „egyszerű” követi, anélkül azonban, hogy a húr található „egyszerű” karakterláncot tartalmazza magát, ez egy előretekintő állítás lehetséges Sport(?=verein). A „Egy sportoló sportol egy sportklubban sportol” példamondatban a szabályos kifejezés ezért illeszkedne a „Sport” utolsó előfordulásához, mivel csak ezt követi a „club” karakterlánc; azonban nem illeszkedne a „sportklub” alhúrhoz.

Annak a tulajdonságnak köszönhetően, hogy a megadott kontextus (a "klub" példában) meg van adva, de nem kifejezett része a megfelelő karakterláncnak (itt "sport"), a nulla szélességű attribútumot általában az állítások kapcsán is megemlítik . A teljes jelölések tehát - attól függően, hogy szükség van -e egy bizonyos kontextusra (pozitív) vagy tiltott (negatív) - nulla szélességű pozitív / negatív előrelátó / mögötti állítások. Az irányok elnevezése onnan származik, hogy a Regexp elemzők mindig egy karakterláncot dolgoznak fel balról jobbra.

meghatározás leírás Magyarázat Jelölés
(?=Ausdruck) pozitív előrelátó állítás A kifejezésnek követniekellafenti kifejezést Ausdruck(?=Ausdruck)
(?!Ausdruck) negatív előrelátó állítás A kifejezés nemkövetheti afent említett kifejezést Ausdruck(?!Ausdruck)
(?<=Ausdruck) pozitív visszatekintő állítás A kifejezésnek meg kellelőznie akövetkező kifejezést (?<=Ausdruck)Ausdruck
(?<!Ausdruck) negatív visszatekintő állítás A kifejezés nem előzheti meg akövetkező kifejezést (?<!Ausdruck)Ausdruck

A körültekintést nemcsak a Perl és a PCRE támogatja , hanem többek között a Java , a .NET és a Python is . Az 1.5-ös verziótól kezdve a JavaScript pozitív és negatív előretekintést értelmez.

példa
\s(?=EUR)"szóköz" karaktert (azaz szóközt vagy tabulátort) jelöl, amelyet a karakterlánc követ EUR. Ezzel szemben \sEURitt EURnem tartozik egyező karakterlánc (angolul: "matched karakterlánc").

Feltételes kifejezések

A feltételes kifejezések viszonylag ritkák. Ezek használhatók többek között a Perl, a PCRE és a .Net keretrendszerben. A Python csak korlátozott funkcionalitást kínál az ilyen kifejezésekhez a körültekintő állításokkal kapcsolatban .

(?(Bedingung)wahr-Ausdruck|falsch-Ausdruck) Ha megtaláljuk az adott „feltétel” kifejezést, akkor az „igaz kifejezést” használjuk. Ha a keresési kifejezés nem található, akkor a „rossz kifejezést” kell használni.

példa

Kifejezése (\()?\d+(?(1)\))húrok, mint 1, (2), 34vagy (567), de nem 3)talált.

irodalom

Rendszeres kifejezések

Rendszeres kifejezések és természetes nyelvek

  • Kenneth R. Beesley, Lauri Karttunen: Véges állapotú morfológia. Elosztva a Nyelv- és Információs Tanulmányi Központ számára. 2003. 2003-as sorozat: (CSLI-SCL) Studies in Computational Linguistics.

Reguláris kifejezések és automata elmélet

Kutatási irodalom

  • Stephen C. Kleene: Az események ábrázolása az ideghálózatokban és a véges automatákban. In: Claude E. Shannon, John McCarthy (szerk.): Automata Studies. Princeton University Press, 1956, 3-42.

web Linkek

szoftver

Egyéni bizonyíték

  1. a b Stephen C. Kleene : Az események ábrázolása az ideghálózatokban és a véges automatákban . In: Claude E. Shannon , John McCarthy (szerk.): Automata Studies . Princeton University Press, 1956, pp. 3-42 .
  2. ^ Alfred V. Aho , Ravi Sethi, Jeffrey Ullman : Összeállítások: elvek, technikák és eszközök. Addison-Wesley, 1986
  3. ^ A b c John E. Hopcroft , Jeffry D. Ullman : Bevezetés az automataelméletbe, a formális nyelvekbe és a komplexitáselméletbe . Addison-Wesley, Bonn 1994, ISBN 3-89319-744-3 .
  4. Jacques Sakarovitch: A nyelv, a kifejezés és a (kicsi) automatika . In: LNCS . 3845, 2006, 15-30. doi : 10.1007 / 11605157_2 .
  5. POSIX specifikációk
  6. RE Bracket Expression , IEEE Std 1003.1, The Open Group Base Specifications, 2004
  7. Nézd és nézd meg a nulla szélességű állításokat . Rendszeres kifejezések.info
  8. ^ Mozilla Developer Network: JavaScript referencia
  9. Ha-akkor-más feltételek a reguláris kifejezésekben . Rendszeres kifejezések.info