A reguláris kifejezések olyan számítógépes programokban használatos formális nyelvek , amelyek szöveggel dolgoznak , hogy metakarakterek ( helyettesítő karakterek ) használatán alapuló részkaraktereket keressenek és kezeljenek a szövegben . A kereséshez mintakarakterláncot használnak ( angol minta , oroszul gyakran "sablonnak", "maszknak" nevezik), amely karakterekből és metakarakterekből áll, és beállítja a keresési szabályt. A szöveggel végzett manipulációkhoz egy helyettesítő karakterlánc is megadásra kerül, amely speciális karaktereket is tartalmazhat.
Egyes szövegszerkesztők és segédprogramok reguláris kifejezéseket használnak szövegek keresésére és helyettesítésére. Például reguláris kifejezések használatával megadhat olyan mintákat, amelyek lehetővé teszik:
A reguláris kifejezések sokkal összetettebb keresési vagy csereminták megadását is lehetővé teszik.
A reguláris kifejezéssel végzett munka eredménye a következő lehet:
Ha reguláris kifejezést használunk a szöveg helyettesítésére, akkor a munka eredménye egy új szöveges karakterlánc lesz, amely a forrásszöveg, amelyből a talált (a mintához illeszkedő) részkarakterláncok eltávolításra kerülnek, és a helyettesítő karakterláncok behelyettesítésre kerülnek (esetleg a forrásszöveg elemzése során megjegyzett karaktercsoportok módosítják) . A szövegmódosítás speciális esete a talált minta minden előfordulásának eltávolítása - amelyhez a helyettesítő karakterlánc üresen van megadva.
A UNIX disztribúciókkal együtt szállított segédprogramok (beleértve a sed szerkesztőt és a grep szűrőt ) az elsők között népszerűsítették a reguláris kifejezéseket a szövegszerkesztéshez. Sok modern programozási nyelv rendelkezik beépített támogatással a reguláris kifejezésekhez. Ezek közé tartozik az ActionScript , Perl , Java [1] , PHP , JavaScript , .NET - keretrendszer [2] , Python , Tcl , Ruby , Lua , Gambas , C++ ( 2011-es szabvány ), Delphi , D , Haxe és mások.
A reguláris kifejezések eredete az automataelméletben , a formális nyelvek elméletében és a formális nyelvtanok Chomsky -féle osztályozásában [3] található .
Ezek a területek a számítási modelleket (automaták) és a formális nyelvek leírásának és osztályozásának módjait tanulmányozzák . Az 1940 -es években Warren McCulloch és Walter Pitts egy idegrendszert írt le , amely egy egyszerű automatát használ egy neuron modelljeként .
Stephen Kleene matematikus később leírta ezeket a mintákat „ reguláris halmazoknak ” nevezett matematikai jelölésével.
Ken Thompson beépítette őket a QED szerkesztőbe , majd a UNIX ed szerkesztőbe. Azóta a reguláris kifejezéseket széles körben használják a UNIX és UNIX-szerű segédprogramokban, mint például az expr , awk , Emacs , vi , lex és Perl .
A Perl és Tcl reguláris kifejezései Henry Spencer által írt megvalósításból származnak . Philip Hazel kifejlesztette a PCRE ( Perl -kompatibilis reguláris kifejezések ) könyvtárát , amelyet számos modern eszközben használnak, mint például a PHP és az Apache . .
A reguláris kifejezések konstansokból és operátorokból állnak, amelyek karakterlánc -készleteket , illetve az azokra vonatkozó műveletek halmazait határozzák meg. A következő állandók vannak meghatározva:
és a következő műveleteket:
A modern programozási nyelvekben (különösen a PCRE -ben ) található reguláris kifejezések nagyobb erővel bírnak, mint a formális nyelvelméletben reguláris kifejezések; különösen számozott háttérhivatkozásaik vannak . Ez lehetővé teszi számukra, hogy ne csak a reguláris nyelvtanok által leírt karakterláncokat elemezzék, hanem bonyolultabbak is, különösen a környezetfüggetlen nyelvtanok [5] [6] .
A reguláris kifejezésekben szereplő karakterek többsége önmagát képviseli, kivéve a speciális karaktereket [ ] \ / ^ $ . | ? * + ( ) { } (ez a készlet különbözik a reguláris kifejezések különböző típusainál, lásd: A reguláris kifejezések változatai ), amelyek karakterrel \(fordított perjel) megszökve, szöveges karakterként jeleníthetők meg. Egy egész karaktersorozatot kiléphet, ha azt \Qés közé zárja \E.
Példa | Megfelelőség |
---|---|
a\.? | a.vagya |
a\\\\b | a\\b |
a\[F\] | a[F] |
\Q+-*/\E | +-*/ |
Más speciális karakterek is hasonlóképpen ábrázolhatók (a karakterkészletek, amelyek megszakítást igényelnek, az adott megvalósítástól függően változhatnak). Azok a karakterek egy része, amelyek egyik vagy másik megvalósításában nem igényelnek kihagyást (például szögletes zárójelek < >), olvashatósági okokból kihagyhatók.
Bármely karakterA metakarakter .(pont) bármely egyedi karaktert jelent, de bizonyos megvalósításokban az újsor karaktert kivéve.
Karakter helyett .használhatja [\s\S](minden szóköz és nem szóköz karakter, beleértve az újsor karaktert is).
Karakterosztályok (karakterkészletek)A szögletes zárójelben [ ]lévő karakterkészletet karakterosztálynak nevezzük, és lehetővé teszi, hogy jelezze a reguláris kifejezés értelmezőjének, hogy a felsorolt karakterek valamelyike megjelenhet egy karakterlánc adott helyén. Konkrétan [абв]beállítja a három megadott karakter valamelyikének előfordulásának lehetőségét a szövegben, és [1234567890]beállítja a megfelelést az egyik számjegyhez. Lehetőség van karaktertartományok megadására: például [А-Яа-я]megfelel az orosz ábécé összes betűjének, kivéve a "Ё" és "ё" [7] betűket . A reguláris kifejezések egyes megvalósításai lehetővé tehetik, hogy a karakterosztályok ne csak karaktereket, hanem teljes karakterláncokat is tartalmazzanak. [nyolc]
Ha olyan karaktereket szeretne megadni, amelyek nem szerepelnek a megadott készletben, használja a ^szögletes zárójelben lévő karaktert, például [^0-9]a számokon kívül minden más karaktert jelent.
A legegyszerűbb módja annak, hogy speciális karaktereket adjunk hozzá a készlethez meneküléssel. A modern reguláris kifejezések azonban a hagyományos megközelítést is öröklik – lásd: Hagyományos reguláris kifejezések .
Egyes karakterosztályok speciális metakarakterekkel helyettesíthetők:
Szimbólum | Lehetséges egyenértékű [9] | Megfelelőség |
---|---|---|
\d | [0-9] | Цифровой символ |
\D | [^0-9] | Нецифровой символ |
\s | [ \f\n\r\t\v] | Пробельный символ |
\S | [^ \f\n\r\t\v] | Непробельный символ
Пример: Выражение вида ^\S.* или ^[^ \f\n\r\t\v].* будет находить строки, начинающиеся с непробельного символа |
\w[10] | [A-Za-z0-9_] | Буквенный или цифровой символ или знак подчёркивания; буквы ограничены латиницей
Пример: Выражение вида \w+ будет находить и выделять отдельные слова |
\W[11] | [^A-Za-z0-9_] | Любой символ, кроме буквенного или цифрового символа или знака подчёркивания |
A következő karakterek lehetővé teszik a reguláris kifejezés elhelyezését a szövegelemekhez képest: sor eleje és vége, szóhatárok.
Teljesítmény | Pozíció | Példa | Megfelelőség |
---|---|---|---|
^ | Szöveg eleje (vagy sor ?m módosítóval) | ^a | aaa aaa |
$ | Szöveg vége (vagy sor ?m módosítóval) | a$ | aaa aaa |
\b | szószegély | a\b | aaa aaa |
\ba | aaa aaa | ||
\B | Egy szó sem határ | \Ba\B | aaa aaa |
\G | Korábbi sikeres keresés | \Ga | aaa aaa(a keresés a 4. helyen állt meg - ahol nem találták a) |
\n - soremelés
\r - kocsi vissza
A zárójelek a műveletek hatókörének és elsőbbségének meghatározására szolgálnak . Egy csoporton belüli minta egészeként kerül feldolgozásra, és számszerűsíthető. Például a kifejezés (тр[ау]м-?)*egy formátumú sorozatot fog találni трам-трам-трумтрам-трум-трамтрум.
Függőleges sáv választja el az érvényes opciókat. Például gray|greygyufa grayvagy grey. Emlékeztetni kell arra, hogy az opciók felsorolása balról jobbra történik, ahogyan azok meg vannak jelölve.
Ha egy összetettebb reguláris kifejezésen belül kíván opciókat megadni, akkor azt egy csoportba kell zárni. Például írjon le egy karakterláncot gray|greyvagy . Egykarakteres alternatívák esetén a lehetőséget részesítjük előnyben , mivel a karakterosztályokkal való összehasonlítás egyszerűbb, mint egy csoport feldolgozása az összes lehetséges módosító ellenőrzésével és visszacsatolás generálásával. gr(a|e)ygraygreygr[ae]y
A karakter, karakterosztály vagy csoport utáni kvantor határozza meg, hogy az előző kifejezés hányszor fordulhat elő. Vegye figyelembe, hogy egy kvantor egynél több karakterre hivatkozhat egy reguláris kifejezésben, ha az egy karakterosztály vagy -csoport.
Teljesítmény | Ismétlések száma | Egyenértékű | Példa | Megfelelőség |
---|---|---|---|---|
? | Nulla vagy egy | {0,1} | colou?r | color,colour |
* | Nulla vagy több | {0,} | colou*r | color, colourstb colouur . |
+ | Egy vagy több | {1,} | colou+r | colourstb colouur . (de nem color) |
Teljesítmény | Ismétlések száma | Példa | Megfelelőség |
---|---|---|---|
{n} | Pontosan n - szer | colou{3}r | colouuur |
{m,n} | m - től n -ig , beleértve | colou{2,4}r | colouur. colouuur_colouuuur |
{m,} | Nem kevesebb, mint m | colou{2,}r | colouur, colouuurstb colouuuur . |
{,n} | legfeljebb n | colou{,3}r | color... colour_ colouur_colouuur |
A sorozatot gyakran használják .*tetszőleges számú karakter jelölésére a reguláris kifejezés két része között.
A karakterosztályok kvantorokkal kombinálva lehetővé teszik a valós szövegekkel való egyeztetést. Például számoszlopok, telefonszámok, postai címek, HTML jelölőelemek stb.
Ha a karakterek { } nem alkotnak kvantort, a speciális jelentésüket figyelmen kívül hagyja.
Mohó és lusta számszerűsítés Példa a mohó és lusta kifejezések használatáraA kifejezés (<.*>)megfelel egy karakterláncnak, amely teljes egészében több HTML jelölőcímkét tartalmaz.
<p><b>Википедия</b> — свободная энциклопедия, в которой <i>каждый</i> может изменить или дополнить любую статью.</p>
Az egyes címkék kiemeléséhez alkalmazhatja a kifejezés lusta változatát: (<.*?>) Nem a fent látható teljes sornak felel meg, hanem az egyes címkéknek (színnel kiemelve):
<p><b>Википедия</b> — свободная энциклопедия, в которой <i>каждый</i> может изменить или дополнить любую статью.</p>
Egyes megvalósításokban a reguláris kifejezésekben lévő kvantorok a lehető leghosszabb karakterláncnak felelnek meg (a kvantorok greedy , angolul greedy ). Ez jelentős probléma lehet. Például egy kifejezéstől gyakran elvárják, hogy HTML - címkéket(<.*>) találjon a szövegben . Ha azonban egynél több HTML-címke van a szövegben, akkor a több címkét tartalmazó teljes sor megfelel a kifejezésnek.
<p><b>Википедия</b> — свободная энциклопедия, в которой <i>каждый</i> может изменить или дополнить любую статью.</p>
Ezt a problémát kétféleképpen lehet megoldani.
A lusta kvantorok használata inverz problémához vezethet, ha egy kifejezés túl rövid, különösen az üres karakterlánc.
Kapzsi | Lusta |
---|---|
* | *? |
+ | +? |
{n,} | {n,}? |
Szintén gyakori probléma a mohó és lusta kifejezéseknél a kifejezések változatai közötti iteráció visszatérési pontjai. A kvantor minden iterációja után pontok kerülnek elhelyezésre. Ha az értelmező nem talál egyezést a kvantor után, akkor az összes beállított pontra elkezd visszaadni, onnantól eltérő módon újraszámolva a kifejezést.
Féltékeny számszerűsítés (szuperkapzsi)Amikor kifejezést keres egy karakterláncban, az értelmező megközelítőleg a következő útvonalon halad: (a+a+)+a aaaaa
Féltékeny kvantor használatakor csak az algoritmus első lépése kerül végrehajtásra.
A reguláris (mohó) kvantifikációtól eltérően a féltékeny (birtokló) kvantifikáció nem csak a leghosszabb opciót próbálja megtalálni, de azt sem teszi lehetővé, hogy az algoritmus visszatérjen az előző keresési lépésekhez, hogy a reguláris kifejezés többi részére találjon lehetséges egyezéseket.
A féltékeny kvantorok használata növeli a keresési sebességet, különösen olyan esetekben, amikor a karakterlánc nem egyezik a reguláris kifejezéssel. Ezen kívül féltékenységi kvantifikátorok segítségével kiküszöbölhetők a nem kívánt egyezések.
Kapzsi | Irigy |
---|---|
* | *+ |
? | ?+ |
+ | ++ |
{n,} | {n,}+ |
Példa | Megfelelőség |
---|---|
ab(xa)*+a | abxaabxaa; de nem , mivel a levél már el van foglalva abxaabxaaa |
Ez analóg az atomcsoportosítással .
A csoportosítás egyik módja a korábban megtalált karaktercsoportok ( alkarakterláncok , blokkok , megjelölt részkifejezések , rögzítések ) újrafelhasználása. A kifejezés feldolgozása során a csoporton belüli minta által talált részsztringek külön memóriaterületen tárolódnak, és egytől kezdődő számot kapnak. Minden egyes részkarakterlánc megfelel egy zárójelpárnak a reguláris kifejezésben. A csoportos számszerűsítés nem befolyásolja a mentett eredményt, azaz csak az első előfordulás kerül mentésre. Általában legfeljebb 9 számozott, 1-től 9-ig számozott részkarakterlánc támogatott, de egyes értelmezők lehetővé teszik, hogy többel is dolgozzon. Ezt követően ezen a reguláris kifejezésen belül a -tól \1-ig jelölés használható \9egy korábban talált részstringgel való egyezés ellenőrzésére.
Például a reguláris kifejezés (та|ту)-\1megegyezik a та-таvagy karakterlánccal ту-ту, de kihagyja a karakterláncot та-ту.
A korábban talált részkarakterláncok is használhatók reguláris kifejezéssel való helyettesítéskor. Ebben az esetben ugyanazok a szimbólumok kerülnek be a helyettesítő szövegbe, mint magában a kifejezésben.
Csoportosítás visszajelzés nélkülHa a csoportot csak csoportosításra használjuk, és eredményére később nincs szükség, akkor használhatja a típus csoportosítását . Egy ilyen csoportosítás eredményéhez nincs külön memóriaterület, és ennek megfelelően szám sincs hozzárendelve. Ez pozitív hatással van a kifejezések végrehajtásának sebességére, de csökkenti az olvashatóságot. (?:шаблон)
AtomcsoportosításEgy nézet atomi csoportosítása , akárcsak a visszacsatolás nélküli csoportosítás, nem hoz létre visszacsatolást. Ezzel szemben egy ilyen csoportosítás tiltja a visszalépést a karakterláncon keresztül, ha a minta egy részét már megtalálták. (?>шаблон)
Példa | Megfelelőség | Csoportok létrehozva |
---|---|---|
a(bc|b|x)cc | abccaxcc
abccaxcc |
abccaxcc
abccaxcc |
a(?:bc|b|x)cc | abccaxcc,abccaxcc | Nem |
a(?>bc|b|x)cc | abccaxcc
de nem abccaxcc: variáns xtalálható, többi figyelmen kívül hagyva |
Nem |
a(?>x*)xa | nem található axxxa: mindenki xelfoglalt, és a csoporton belül nincs visszaút |
Az atomi csoportosítás még gyorsabb, mint a nyílt hurkú csoportosítás, és CPU-időt takarít meg a kifejezés többi részének végrehajtása közben, mivel megakadályozza, hogy a csoporton belül a többi opciót ellenőrizzék, ha az egyik opciót már megtalálták. Ez nagyon hasznos, ha sokféle lehetőséget kínáló csoportokat optimalizál.
Ez analóg a féltékeny számszerűsítéssel .
MódosítókA módosítók az előfordulás pillanatától a reguláris kifejezés vagy az ellenkező módosító végéig érvényesek. Egyes értelmezők alkalmazhatják a módosítót a teljes kifejezésre, nem pedig az előfordulás pillanatától kezdve.
Szintaxis | Leírás | |
---|---|---|
(?i) | Magába foglalja | kis- és nagybetűk érzéketlensége _ _ |
(?-i) | Kikapcsol | |
(?s) | Magába foglalja | pontegyezési mód a soremelés és a kocsivissza karakterek számára |
(?-s) | Kikapcsol | |
(?m) | Szimbólumok ^és $csak egyezést okoznak | újsor karakterek után és előtt |
(?-m) | a szöveg kezdetével és végével | |
(?x) | Magába foglalja | módban anélkül, hogy figyelembe venné a reguláris kifejezés részei közötti szóközöket, és lehetővé teszi #a megjegyzésekhez való használatát |
(?-x) | Kikapcsol |
A módosító csoportok egy csoportba vonhatók össze: (?i-sm). Egy ilyen csoport be- és kikapcsolja a és imódokat . Ha csak egy csoporton belül szükséges a módosítók használata, akkor a csoporton belül a módosítók és a kettőspont után a kívánt minta jelenik meg. Például megtalálja , de nem . sm(?-i)(?i:tv)setTVsetTVSET
MegjegyzésekHa megjegyzéseket szeretne hozzáadni egy reguláris kifejezéshez, használhatja az űrlap megjegyzéscsoportjait . Az ilyen csoportokat az értelmező teljesen figyelmen kívül hagyja, és nem ellenőrzi, hogy előfordul-e a szövegben. Például a kifejezés megegyezik a karakterlánccal . (?#комментарий)А(?#тут комментарий)БАБ
A legtöbb reguláris kifejezés-megvalósításnak megvan egy módja annak, hogy a keresett szövegrész előtt vagy után megjelenő környező szöveget "átnézve" keressen (de nem tartalmazza). A negatív keresést ritkábban használják, és „biztosítja”, hogy a megadott egyezések, éppen ellenkezőleg, ne forduljanak elő a keresett szövegrészlet előtt vagy után.
Teljesítmény | Nézet típusa | Példa | Megfelelőség |
---|---|---|---|
(?=шаблон) | pozitív előrelátás | Людовик(?=XVI) | ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL |
(?!шаблон) | Negatív előretekintés (tagadással) | Людовик(?!XVI) | ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL |
(?<=шаблон) | Pozitív visszatekintés | (?<=Сергей )Иванов | Сергей Иванов, Игорь Иванов |
(?<!шаблон) | Negatív visszatekintés (tagadással) | (?<!Сергей )Иванов | Сергей Иванов, Игорь Иванов |
A reguláris kifejezések számos megvalósításában a már megtalált értékek alapján kiválasztható, hogy a reguláris kifejezés egyik vagy másik helyén az ellenőrzés melyik utat járja be.
Teljesítmény | Magyarázat | Példa | Megfelelőség |
---|---|---|---|
(?(?=если)то|иначе) | Ha a vizsgálati művelet sikeres, akkor a következő rész végrehajtásra kerül то, ellenkező esetben a rész végrehajtásra kerül иначе. A négy keresési művelet bármelyike használható egy kifejezésben. Ne feledje, hogy a keresési művelet nulla szélességű, ezért a részeknek тоpozitív kikeresés vagy иначеnegatív keresés esetén tartalmazniuk kell a kikeresési műveletből származó sablon leírását. | (?(?<=а)м|п) | мам,пап |
(?(n)то|иначе) | Ha az n -edik csoport értéket adott vissza, akkor a feltétel szerinti keresést a minta hajtja végre то, egyébként a minta иначе. | (а)?(?(1)м|п) | мам,пап |
Egyes nyelveken (például JavaScriptben ) az ún. „jelzők”, amelyek kiterjesztik a RegExp funkcióit. A jelzők a reguláris kifejezés után kerülnek megadásra (a jelzők sorrendje nem számít). Tipikus zászlók:
A zászló a minta után van megadva, például így: . /[0-9]$/m
( angol alapvető reguláris kifejezések (BRE)). Hagyományos UNIX reguláris kifejezések . Az alapvető reguláris kifejezés szintaxist a POSIX már elavult , de a visszafelé kompatibilitási okokból még mindig széles körben használják. Sok UNIX segédprogram alapértelmezés szerint használ ilyen reguláris kifejezéseket.
Ez a verzió metakaraktereket tartalmaz:
Sajátosságok:
( angol kiterjesztett reguláris kifejezések (ERE)). A szintaxis alapvetően ugyanaz, mint a hagyományos.
A Perl- kompatibilis reguláris kifejezések (PCRE) még a POSIX ERE-nél is gazdagabb szintaxissal rendelkeznek . Emiatt sok alkalmazás a Perl-kompatibilis reguláris kifejezés szintaxist használja.
Az Unicode egy karakterkészlet, amelynek célja, hogy meghatározza az összes karaktert és szimbólumot minden emberi nyelvről, legyen az élő és holt. A sok nyelvre tervezett reguláris kifejezések így nincsenek meghatározott karakterkészletekhez kötve, hanem elfogadott szabályok szerint írják le azokat. Így például a nagybetűk keresésére szolgáló kifejezés bármely ábécében így néz ki: /\p{Lu}/.
teljesítmény | funkcionalitás | |
---|---|---|
lehetséges rövid forma | lehetséges hosszú forma | |
Levelek | ||
\p{L} | \p{Letter} | bármilyen betűt bármilyen nyelven |
\p{Ll} | \p{Lowercase_Letter} | azok kisbetűi (kisbetűi), amelyekben nagybetűs írásmód van |
\p{Lu} | \p{Uppercase_Letter} | nagybetűk (nagybetűk) a kisbetűs írásmóddal rendelkezők számára |
\p{Lt} | \p{Titlecase_Letter} | kisbetűs szó elején megjelenő nagybetű |
\p{L&} | \p{Cased_Letter} | olyan betű, amelyben kis- és nagybetűk is vannak |
\p{Lm} | \p{Modifier_Letter} | betűként használt speciális karakterek |
\p{Lo} | \p{Other_Letter} | olyan karakter vagy ideogram, amelynek nincs kis- vagy nagybetűs írásmódja |
Különleges szimbólumok | ||
\p{M} | \p{Mark} | más karakterekkel kombinálható karakterek (pl. ékezetek, umlautok, burkoló zárójelek) |
\p{Mn} | \p{Non_Spacing_Mark} | beszúrt karakter, amelyet más karakterekkel kombinálhat anélkül, hogy extra szélességet venne fel |
\p{Mc} | \p{Spacing_Combining_Mark} | beszúrt karakterek más karakterekkel kombinálva, extra szélességet foglalva (mint sok keleti nyelvben) |
\p{Me} | \p{Enclosing_Mark} | karaktereket körbeölelő karakterek. Például kör, négyzet stb. |
Szóközök és elválasztók | ||
\p{Z} | \p{Separator} | bármilyen szóköz vagy láthatatlan elválasztó |
\p{Zs} | \p{Space_Separator} | olyan szóköz karakterek, amelyek láthatatlanok, de szélesek |
\p{Zl} | \p{Line_Separator} | sorelválasztó jel U+2028 |
\p{Zp} | \p{Paragraph_Separator} | bekezdésjel U+2029 |
Matematikai szimbólumok | ||
\p{S} | \p{Symbol} | matematikai szimbólumok, valuta szimbólumok, pszeudográfiai szimbólumok (keretek) stb. |
\p{Sm} | \p{Math_Symbol} | bármilyen matematikai szimbólum |
\p{Sc} | \p{Currency_Symbol} | bármilyen valuta szimbólum |
\p{Sk} | \p{Modifier_Symbol} | kombinált karakter (jel) magának a karakternek és a mark karakternek a kombinációjaként |
\p{So} | \p{Other_Symbol} | különféle szimbólumok, nem matematikai, nem pénznem szimbólumok vagy ezek kombinációi |
Numerikus karakterek | ||
\p{N} | \p{Number} | bármilyen digitális karakter bármilyen nyelven |
\p{Nd} | \p{Decimal_Digit_Number} | számok nullától kilencig bármilyen nyelven |
\p{Nl} | \p{Letter_Number} | olyan szám, amely betűnek, például római számnak tűnhet |
\p{No} | \p{Other_Number} | felső vagy alsó indexként ábrázolt szám, vagy olyan szám, amely nem számjegyekből áll (kivéve az ideográfiai szkriptekből származó számokat) |
Központozás | ||
\p{P} | \p{Punctuation} | bármilyen írásjelet |
\p{Pd} | \p{Dash_Punctuation} | bármilyen kötőjel vagy gondolatjel |
\p{Ps} | \p{Open_Punctuation} | bármilyen nyitó zárójel |
\p{Pe} | \p{Close_Punctuation} | bármilyen záró zárójel |
\p{Pi} | \p{Initial_Punctuation} | bármilyen nyitó idézet |
\p{Pf} | \p{Final_Punctuation} | bármilyen záró idézet |
\p{Pc} | \p{Connector_Punctuation} | írásjelek, például aláhúzásjelek vagy szóösszetételek |
\p{Po} | \p{Other_Punctuation} | bármilyen írásjelet, amely nem pont, zárójel, idézőjel vagy csatlakozó |
Vezérlő karakterek | ||
\p{C} | \p{Other} | láthatatlan vezérlőkarakterek és nem használt pozíciók |
\p{Cc} | \p{Control} | ASCII vagy Latin-1 vezérlőkarakterek: 0x00-0x1F és 0x7F-0x9F |
\p{Cf} | \p{Format} | láthatatlan formázásjelzők |
\p{Co} | \p{Private_Use} | bármely személyes használatra fenntartott pozíció |
\p{Cs} | \p{Surrogate} | az UTF-16 kódolású pótpárok fele |
\p{Cn} | \p{Unassigned} | minden olyan pozíció, amelyhez nincs szimbólum hozzárendelve |
Egyes esetekben célszerű reguláris kifejezéseket használni a természetes nyelvű , azaz emberek által írt szövegrészletek elemzésére, amelyek esetleg elírási hibákat vagy nem szabványos szóhasználatot tartalmaznak. Ha például felmérést végez (mondjuk egy webhelyen), „melyik metróállomást használja”, kiderülhet, hogy a látogatók a „Nevszkij Prospekt” kifejezést a következőképpen jelezhetik:
Itt a szokásos reguláris kifejezések nem alkalmazhatók, elsősorban amiatt, hogy a mintákban szereplő szavak nem feltétlenül egyeznek pontosan (fuzzy), de ennek ellenére célszerű lenne leírni a minta elemei közötti strukturális függőségeket. a reguláris kifejezésekkel például esetünkben azt jelzik, hogy az egyezés lehet a „Nevszkij Prospekt” VAGY „Griboedov-csatorna” mintával, sőt, a „Prospect” rövidítve „pr”-re vagy hiányozhat, az „Eb” rövidítés pedig lehet. " a "Csatorna" elé kerülhet.
Ez a feladat hasonló a teljes szöveges kereséshez , abban különbözik, hogy itt egy rövid töredéket kell összehasonlítani egy mintakészlettel, a teljes szöveges keresésnél pedig éppen ellenkezőleg, a minta általában egy, míg a szövegrészlet nagyon nagy , vagy a lexikális egyértelműsítési probléma , amely azonban nem teszi lehetővé a mintaelemek közötti strukturáló kapcsolatok megadását.
Van néhány olyan könyvtár , amely megvalósítja a reguláris kifejezési mechanizmust a fuzzy összehasonlítás lehetőségével:
Formális nyelvek és formális nyelvtanok | |
---|---|
Általános fogalmak | |
Típus 0 | |
1. típus |
|
2. típus | |
3. típus |
|
elemzése |