Säännölliset lausekkeet ovat muodollinen kieli , jota käytetään tietokoneohjelmissa, jotka työskentelevät tekstin kanssa etsiäkseen ja käsitelläkseen tekstissä olevia alimerkkijonoja metamerkkien ( jokerimerkkien ) käytön perusteella . Hakuun käytetään kuviomerkkijonoa ( englanninkielinen malli , venäjäksi sitä kutsutaan usein "malliksi", "maskiksi"), joka koostuu merkeistä ja metamerkeistä ja asettaa hakusäännön. Tekstin käsittelyä varten määritetään lisäksi korvaava merkkijono, joka voi sisältää myös erikoismerkkejä.
Jotkut tekstieditorit ja apuohjelmat käyttävät säännöllisiä lausekkeita tekstin etsimiseen ja korvaamiseen. Säännöllisten lausekkeiden avulla voit esimerkiksi määrittää malleja, joiden avulla voit:
Säännöllisten lausekkeiden avulla voit myös määrittää paljon monimutkaisempia haku- tai korvausmalleja.
Säännöllisen lausekkeen kanssa työskentelyn tulos voi olla:
Jos tekstin korvaamiseen käytetään säännöllistä lauseketta, työn tuloksena syntyy uusi tekstimerkkijono, joka on lähdeteksti, josta löydetyt (kuvioon sopivat) osamerkkijonot poistetaan ja korvaavat merkkijonot korvataan (mahdollisesti). muokattu lähdetekstistä jäsentämisen aikana muistetuilla merkkiryhmillä) . Tekstin muokkauksen erikoistapaus on kaikkien löydetyn kuvion esiintymien poistaminen - jolle korvaava merkkijono on määritetty tyhjäksi.
UNIX - jakelujen mukana toimitetut apuohjelmat (mukaan lukien sed -editori ja grep - suodatin ) olivat ensimmäisten joukossa, jotka suosivat säännöllisiä lausekkeita tekstinkäsittelyä varten. Monissa nykyaikaisissa ohjelmointikielissä on sisäänrakennettu tuki säännöllisille lausekkeille. Niitä ovat ActionScript , Perl , Java [1] , PHP , JavaScript , .NET Framework kielet [2] , Python , Tcl , Ruby , Lua , Gambas , C++ ( 2011 standardi ), Delphi , D , Haxe ja muut.
Säännöllisten lausekkeiden alkuperä on automaattiteoriassa , muodollisten kielten teoriassa ja Chomskyn muodollisten kielioppien luokittelussa [ 3] .
Näillä aloilla tutkitaan laskennallisia malleja (automaatteja) ja tapoja kuvailla ja luokitella muodollisia kieliä . 1940 -luvulla Warren McCulloch ja Walter Pitts kuvasivat hermojärjestelmää käyttämällä yksinkertaista automaattia neuronin mallina .
Matemaatikko Stephen Kleene kuvasi näitä kuvioita myöhemmin käyttämällä matemaattista merkintää nimeltä " säännölliset joukot ".
Ken Thompson rakensi ne QED -editoriin ja sitten UNIX ed -editoriin. Siitä lähtien säännöllisiä lausekkeita on käytetty laajalti UNIX- ja UNIX-tyyppisissä apuohjelmissa, kuten expr , awk , Emacs , vi , lex ja Perl .
Perlin ja Tcl:n säännölliset lausekkeet tulevat Henry Spencerin kirjoittamasta toteutuksesta . Philip Hazel kehitti PCRE ( Perl - yhteensopivat säännölliset lausekkeet ) -kirjaston , jota käytetään monissa nykyaikaisissa työkaluissa , kuten PHP ja Apache .
Säännölliset lausekkeet koostuvat vakioista ja operaattoreista , jotka määrittävät merkkijonojoukot ja operaatiot niille. Seuraavat vakiot määritellään:
ja seuraavat toiminnot:
Nykyaikaisissa ohjelmointikielissä (erityisesti PCRE ) löytyvillä säännöllisillä lausekkeilla on enemmän voimaa kuin muodollisen kieliteorian säännöllisillä lausekkeilla; erityisesti niissä on numeroidut taustaviitteet . Tämän ansiosta he voivat jäsentää merkkijonoja, joita kuvailevat säännöllisten kielioppien lisäksi myös monimutkaisemmat, erityisesti yhteydettömät kieliopit [5] [6] .
Useimmat säännöllisen lausekkeen merkit edustavat itseään, lukuun ottamatta erikoismerkkejä [ ] \ / ^ $ . | ? * + ( ) { } (tämä joukko eroaa erityyppisissä säännöllisissä lausekkeissa, katso Säännöllisten lausekkeiden lajikkeet ), jotka voidaan ohittaa merkillä \(kenoviiva) esittämään itsensä tekstimerkkeinä. Voit paeta koko merkkijonoa lisäämällä sen väliin \Qja \E.
Esimerkki | Yhdenmukaisuus |
---|---|
a\.? | a.taia |
a\\\\b | a\\b |
a\[F\] | a[F] |
\Q+-*/\E | +-*/ |
Muut erikoismerkit voidaan esittää samalla tavalla (merkkijoukot, jotka vaativat poistomerkin, voivat vaihdella tietyn toteutuksen mukaan). Osa merkeistä, jotka yhdessä tai toisessa toteutuksessa eivät vaadi vaihtomerkkiä (esimerkiksi kulmasulkeet < >), voidaan ohittaa luettavuussyistä.
Mikä tahansa merkkiMetamerkki .(piste) tarkoittaa mitä tahansa yksittäistä merkkiä, mutta joissakin toteutuksissa rivinvaihtomerkkiä lukuun ottamatta.
Merkin sijasta .voit käyttää [\s\S](kaikkia välilyöntejä ja muita kuin välilyöntejä, mukaan lukien rivinvaihtomerkki).
Hahmoluokat (merkkijoukot)Hakasulkeissa [ ]olevaa merkkijoukkoa kutsutaan merkkiluokiksi, ja sen avulla voit ilmoittaa säännöllisen lausekkeen tulkille, että jokin luetelluista merkeistä voi esiintyä merkkijonon tietyssä kohdassa. Erityisesti [абв]se asettaa yhden kolmesta määritetystä merkistä esiintymismahdollisuuden tekstissä ja [1234567890]asettaa vastaavuuden yhteen numeroista. On mahdollista määrittää merkkialueita: esimerkiksi [А-Яа-я]vastaa kaikkia venäjän aakkosten kirjaimia, paitsi kirjaimia "Ё" ja "ё" [7] . Jotkut säännöllisten lausekkeiden toteutukset voivat sallia merkkiluokkien sisällyttämisen paitsi merkkien myös kokonaisiin merkkijonoihin. [kahdeksan]
Jos haluat määrittää merkkejä, jotka eivät sisälly määritettyyn joukkoon, käytä ^esimerkiksi hakasulkeissa olevaa merkkiä, [^0-9]mikä tarkoittaa mitä tahansa muuta merkkiä kuin numeroita.
Erikoismerkkien lisääminen joukkoon on yksinkertaisin tapa. Kuitenkin myös nykyaikaiset säännölliset lausekkeet perivät perinteisen lähestymistavan – katso Perinteiset säännölliset lausekkeet .
Jotkut merkkiluokat voidaan korvata erityisillä metamerkeillä:
Symboli | Mahdollinen vastine [9] | Yhdenmukaisuus |
---|---|---|
\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_] | Любой символ, кроме буквенного или цифрового символа или знака подчёркивания |
Seuraavien merkkien avulla voit sijoittaa säännöllisen lausekkeen suhteessa tekstielementteihin: rivin alku ja loppu, sanarajat.
Esitys | asema | Esimerkki | Yhdenmukaisuus |
---|---|---|---|
^ | Tekstin alku (tai rivi ?m-muokkaimella) | ^a | aaa aaa |
$ | Tekstin loppu (tai rivi, jossa on ?m-muuttaja) | a$ | aaa aaa |
\b | sanan raja | a\b | aaa aaa |
\ba | aaa aaa | ||
\B | Ei sanan rajaa | \Ba\B | aaa aaa |
\G | Edellinen onnistunut haku | \Ga | aaa aaa(etsintä lopetettiin 4. paikkaan - josta sitä ei löytynyt a) |
\n - rivinvaihto
\r - vaunun paluu
Sulkeilla määritellään toimintojen laajuus ja tärkeysjärjestys . Ryhmän sisällä oleva malli käsitellään kokonaisuutena ja voidaan kvantifioida. Esimerkiksi lauseke (тр[ау]м-?)*löytää muodon sekvenssin трам-трам-трумтрам-трум-трамтрум.
Pystypalkki erottaa voimassa olevat vaihtoehdot. Esimerkiksi gray|greyottelut graytai grey. On muistettava, että vaihtoehtojen luettelointi suoritetaan vasemmalta oikealle, kuten ne on merkitty.
Jos haluat määrittää monimutkaisemman säännöllisen lausekkeen sisällä vaihtoehtoja, se on suljettava ryhmään. Kuvaile esimerkiksi merkkijonoa gray|greytai . Yksimerkkisten vaihtoehtojen tapauksessa vaihtoehto on parempi , koska vertailu merkkiluokkaan on helpompaa kuin ryhmän käsittely tarkistamalla kaikki sen mahdolliset muuttajat ja luomalla palautetta. gr(a|e)ygraygreygr[ae]y
Merkin , merkkiluokan tai ryhmän jälkeen oleva kvantori määrittää, kuinka monta kertaa edellinen lauseke voi esiintyä. Huomaa, että kvantori voi viitata useampaan kuin yhteen merkkiin säännöllisessä lausekkeessa vain, jos se on merkkiluokka tai ryhmä.
Esitys | Toistojen määrä | Vastaava | Esimerkki | Yhdenmukaisuus |
---|---|---|---|---|
? | Nolla tai yksi | {0,1} | colou?r | color,colour |
* | Nolla tai enemmän | {0,} | colou*r | color, colour, colouur jne. |
+ | Yksi tai useampi | {1,} | colou+r | colourjne colouur . (mutta ei color) |
Esitys | Toistojen määrä | Esimerkki | Yhdenmukaisuus |
---|---|---|---|
{n} | Tasan n kertaa | colou{3}r | colouuur |
{m,n} | M :stä n : ään | colou{2,4}r | colouur. colouuur_colouuuur |
{m,} | Vähintään m | colou{2,}r | colouur, colouuur, colouuuur jne. |
{,n} | enintään n | colou{,3}r | color... colour_ colouur_colouuur |
Sekvenssiä käytetään usein .*merkitsemään mitä tahansa merkkejä säännöllisen lausekkeen kahden osan välillä.
Hahmoluokat yhdistettynä kvantorien kanssa mahdollistavat vastaavuuden oikeiden tekstien kanssa. Esimerkiksi numerosarakkeet, puhelinnumerot, postiosoitteet, HTML - merkintäelementit jne.
Jos merkit { } eivät muodosta kvantifia, niiden erityinen merkitys jätetään huomiotta.
Ahne ja laiska kvantifiointi Esimerkki ahneiden ja laiskojen ilmaisujen käytöstäLauseke (<.*>)vastaa kokonaan merkkijonoa, joka sisältää useita HTML -merkintätageja.
<p><b>Википедия</b> — свободная энциклопедия, в которой <i>каждый</i> может изменить или дополнить любую статью.</p>
Voit korostaa yksittäisiä tunnisteita käyttämällä tämän lausekkeen laiskaa versiota: (<.*?>) Se ei vastaa koko yllä näkyvää riviä, vaan yksittäisiä tunnisteita (korostettu värillä):
<p><b>Википедия</b> — свободная энциклопедия, в которой <i>каждый</i> может изменить или дополнить любую статью.</p>
Joissakin toteutuksissa säännöllisten lausekkeiden kvantisoijat vastaavat pisintä mahdollista merkkijonoa (kvantorit ovat greedy , englanti greedy ). Tämä voi olla merkittävä ongelma. Esimerkiksi lausekkeen odotetaan usein löytävän HTML - tunnisteita(<.*>) tekstistä . Jos tekstissä on kuitenkin useampi kuin yksi HTML-tunniste, koko rivi, joka sisältää useita tageja, vastaa lauseketta.
<p><b>Википедия</b> — свободная энциклопедия, в которой <i>каждый</i> может изменить или дополнить любую статью.</p>
Tämä ongelma voidaan ratkaista kahdella tavalla.
Laiskojen kvantorien käyttö voi johtaa käänteiseen ongelmaan, kun lauseke on liian lyhyt, erityisesti tyhjä merkkijono.
Ahne | Laiska |
---|---|
* | *? |
+ | +? |
{n,} | {n,}? |
Myös yleinen ongelma sekä ahneissa että laiskoissa lausekkeissa ovat palautuspisteet lausekkeen muunnelmien iterointiin. Piste sijoitetaan kvantisaattorin jokaisen iteraation jälkeen. Jos tulkki ei löydä vastinetta kvantorin jälkeen, se alkaa palata kaikille asetuspisteille laskeen lausekkeen sieltä uudelleen eri tavalla.
Mustasukkainen kvantifiointi (supergreedy)Kun etsit lauseketta merkkijonosta, tulkki kulkee suunnilleen seuraavaa polkua: (a+a+)+a aaaaa
Käytettäessä mustasukkaista kvantisoijaa, vain algoritmin ensimmäinen vaihe suoritetaan.
Toisin kuin säännöllinen (ahne) kvantifiointi, mustasukkainen (omistuskykyinen) kvantifiointi ei vain yritä löytää pisintä vaihtoehtoa, vaan se ei myöskään salli algoritmin palata edellisiin hakuvaiheisiin löytääkseen mahdollisia osumia säännöllisen lausekkeen loppuosaan.
Mustasukkaisten kvantorien käyttö lisää hakunopeutta varsinkin tapauksissa, joissa merkkijono ei vastaa säännöllistä lauseketta. Lisäksi mustasukkaisia mittareita voidaan käyttää poistamaan ei-toivottuja osumia.
Ahne | Mustasukkainen |
---|---|
* | *+ |
? | ?+ |
+ | ++ |
{n,} | {n,}+ |
Esimerkki | Yhdenmukaisuus |
---|---|
ab(xa)*+a | abxaabxaa; mutta ei , koska kirje on jo varattu abxaabxaaa |
Tämä on analoginen atomiryhmittelyn kanssa .
Eräs ryhmittelyn käyttötapa on käyttää uudelleen aiemmin löydettyjä merkkiryhmiä ( osamerkkijonoja , lohkoja , merkittyjä alilausekkeita , sieppauksia ). Lauseketta käsiteltäessä ryhmän sisällä kuvion löytämät osamerkkijonot tallennetaan erilliseen muistialueeseen ja saavat numeron yhdestä alkaen. Jokainen osamerkkijono vastaa hakasulkeiden paria säännöllisessä lausekkeessa. Ryhmän kvantifiointi ei vaikuta tallennettuun tulokseen, eli vain ensimmäinen esiintymä tallennetaan. Yleensä tuetaan jopa 9 numeroitua osamerkkijonoa, jotka on numeroitu 1–9, mutta joidenkin tulkkien avulla voit työskennellä useamman kanssa. Myöhemmin tässä säännöllisessä lausekkeessa merkintää alkaen \1to voidaan käyttää \9tarkistamaan vastaavuus aiemmin löydetyn osamerkkijonon kanssa.
Esimerkiksi säännöllinen lauseke (та|ту)-\1vastaa merkkijonoa та-таtai ту-ту, mutta ohita merkkijono та-ту.
Myös aiemmin löydettyjä osamerkkijonoja voidaan käyttää korvattaessa säännöllisellä lausekkeella. Tässä tapauksessa korvaavaan tekstiin lisätään samat symbolit kuin itse lausekkeeseen.
Ryhmittely ilman palautettaJos ryhmää käytetään vain ryhmittelyyn ja sen tulosta ei tarvita myöhemmin, voit käyttää tyypin ryhmittelyä . Tällaisen ryhmittelyn tulokselle ei ole varattu erillistä muistialuetta eikä sille siten osoiteta numeroa. Tämä vaikuttaa positiivisesti lausekkeiden suoritusnopeuteen, mutta heikentää luettavuutta. (?:шаблон)
AtomiryhmittelyNäkymän atomaarinen ryhmittely , kuten ryhmittely ilman palautetta, ei luo palautetta. Sitä vastoin tällainen ryhmittely kieltää palaamisen merkkijonon läpi, jos osa kuviosta on jo löydetty. (?>шаблон)
Esimerkki | Yhdenmukaisuus | Luotuja ryhmiä |
---|---|---|
a(bc|b|x)cc | abccaxcc
abccaxcc |
abccaxcc
abccaxcc |
a(?:bc|b|x)cc | abccaxcc,abccaxcc | Ei |
a(?>bc|b|x)cc | abccaxcc
mutta ei abccaxcc: muunnelma xlöydetty, muut ohitettu |
Ei |
a(?>x*)xa | ei löydy axxxa: kaikilla on xkiire, eikä ryhmän sisällä ole paluuta |
Atomic ryhmittely on jopa nopeampi kuin avoimen silmukan ryhmittely ja säästää suorittimen aikaa suoritettaessa loput lausekkeet, koska se estää muita ryhmän vaihtoehtoja tarkistamasta, kun yksi vaihtoehto on jo löydetty. Tämä on erittäin hyödyllistä optimoitaessa ryhmiä useilla eri vaihtoehdoilla.
Tämä on analogista mustasukkaisen kvantifioinnin kanssa .
ModifiersMuokkaimet ovat voimassa esiintymishetkestä säännöllisen lausekkeen tai vastakkaisen muuntimen loppuun. Jotkut tulkit voivat soveltaa muokkaajaa koko lausekkeeseen sen sijaan, että se esiintyy.
Syntaksi | Kuvaus | |
---|---|---|
(?i) | Sisältää | kirjainkoko _ _ _ |
(?-i) | Sammuu | |
(?s) | Sisältää | pisteen sovitustila rivinsiirrolle ja rivinvaihtomerkeille |
(?-s) | Sammuu | |
(?m) | Symbolit ^ja $aiheuttavat vain osuman | rivinvaihdon jälkeen ja ennen |
(?-m) | tekstin alun ja lopun kanssa | |
(?x) | Sisältää | -tilassa ottamatta huomioon välilyöntejä säännöllisen lausekkeen osien välillä ja voit käyttää #kommentteja |
(?-x) | Sammuu |
Muokkausryhmät voidaan yhdistää yhdeksi ryhmäksi: (?i-sm). Tällainen ryhmä kytkee -tilan päälle ja pois päältä - ja i-tiloista . Jos määrittäjien käyttöä vaaditaan vain ryhmän sisällä, haluttu kuvio merkitään ryhmän sisällä modifiointien ja kaksoispisteen jälkeen. Esimerkiksi se löytää , mutta ei . sm(?-i)(?i:tv)setTVsetTVSET
KommentitVoit lisätä kommentteja säännölliseen lausekkeeseen käyttämällä lomakkeen kommenttiryhmiä . Tulkki jättää tällaisen ryhmän kokonaan huomiotta, eikä sen esiintymistä tekstissä tarkisteta. Esimerkiksi lauseke vastaa merkkijonoa . (?#комментарий)А(?#тут комментарий)БАБ
Useimmissa säännöllisten lausekkeiden toteutuksissa on tapa etsiä tekstikappaletta "tarkastelemalla" (mutta ei mukaan) ympäröivää tekstiä, joka tulee ennen tai jälkeen etsittävää tekstiä. Negatiivista hakua käytetään harvemmin, ja se "varmistaa", että määritettyjä osumia ei päinvastoin esiinny ennen tai jälkeen haetun tekstikappaleen.
Esitys | Näkymän tyyppi | Esimerkki | Yhdenmukaisuus |
---|---|---|---|
(?=шаблон) | positiivinen katse eteenpäin | Людовик(?=XVI) | ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL |
(?!шаблон) | Negatiivinen katse eteenpäin (kielteisen kanssa) | Людовик(?!XVI) | ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL |
(?<=шаблон) | Positiivinen katse taaksepäin | (?<=Сергей )Иванов | Сергей Иванов, Игорь Иванов |
(?<!шаблон) | Negatiivinen katsaus (negaation kanssa) | (?<!Сергей )Иванов | Сергей Иванов, Игорь Иванов |
Monissa säännöllisten lausekkeiden toteutuksissa on jo löydettyjen arvojen perusteella mahdollista valita, minkä polun tarkistus kulkee jossakin säännöllisen lausekkeen kohdassa.
Esitys | Selitys | Esimerkki | Yhdenmukaisuus |
---|---|---|---|
(?(?=если)то|иначе) | Jos tarkistus on onnistunut, seuraava osa suoritetaan то, muuten osa suoritetaan иначе. Mitä tahansa neljästä hakuoperaatiosta voidaan käyttää lausekkeessa. Huomaa, että hakuoperaatio on nollaleveys, joten тоpositiivisen haun tai иначеnegatiivisen haun osien tulee sisältää mallin kuvaus hakutoiminnosta. | (?(?<=а)м|п) | мам,пап |
(?(n)то|иначе) | Jos n : s ryhmä palautti arvon, ehdon mukaan haun suorittaa kuvio то, muuten kaava иначе. | (а)?(?(1)м|п) | мам,пап |
Joillakin kielillä (esimerkiksi JavaScriptissä ) ns. "liput", jotka laajentavat RegExp:n toimintoja. Liput määritellään säännöllisen lausekkeen jälkeen (lippujen järjestyksellä ei ole väliä). Tyypilliset liput:
Lippu määritetään kuvion jälkeen esimerkiksi näin: . /[0-9]$/m
( Englannin perussäännölliset lausekkeet (BRE)). Perinteiset UNIX- säännölliset lausekkeet . POSIX on nyt poistanut säännöllisen lausekkeen perussyntaksin , mutta sitä käytetään edelleen laajalti taaksepäin yhteensopivuuden vuoksi. Monet UNIX-apuohjelmat käyttävät tällaisia säännöllisiä lausekkeita oletuksena.
Tämä versio sisältää metamerkkejä:
Ominaisuudet:
( Englannin laajennettu säännöllinen lauseke (ERE)). Syntaksi on periaatteessa sama kuin perinteisessä.
Perl - yhteensopivilla säännöllisillä lausekkeilla (PCRE) on rikkaampi syntaksi kuin jopa POSIX ERE:llä . Tästä syystä monet sovellukset käyttävät Perl-yhteensopivaa säännöllisen lausekkeen syntaksia.
Unicode on merkistö, jonka tarkoituksena on määritellä kaikki merkit ja symbolit kaikista ihmiskielistä, elävistä ja kuolleista. Monille kielille suunniteltuja säännöllisiä lausekkeita ei siis ole sidottu tiettyihin merkistöihin, vaan ne kuvaavat niitä hyväksyttyjen sääntöjen mukaisesti. Joten esimerkiksi lauseke isojen kirjainten löytämiseksi mistä tahansa aakkosesta näyttäisi tältä: /\p{Lu}/.
esitys | toiminnallisuutta | |
---|---|---|
mahdollinen lyhyt muoto | mahdollinen pitkä muoto | |
Kirjaimet | ||
\p{L} | \p{Letter} | mikä tahansa kirjain millä tahansa kielellä |
\p{Ll} | \p{Lowercase_Letter} | pienet kirjaimet (pienet kirjaimet) niistä, joissa on isojen kirjoitusasu |
\p{Lu} | \p{Uppercase_Letter} | isot kirjaimet (isot) niille, joiden oikeinkirjoitus on pieni |
\p{Lt} | \p{Titlecase_Letter} | iso kirjain, joka näkyy pienen sanan alussa |
\p{L&} | \p{Cased_Letter} | kirjain, jossa on sekä isot että pienet kirjaimet |
\p{Lm} | \p{Modifier_Letter} | erikoismerkkejä, joita käytetään kirjaimina |
\p{Lo} | \p{Other_Letter} | merkki tai ideogrammi, jossa ei ole isoja tai pieniä kirjaimia |
Erikoissymbolit | ||
\p{M} | \p{Mark} | merkit, jotka on lisätty yhdistettäväksi muiden merkkien kanssa (esim. aksenttimerkit, umlautit, rivityssulut) |
\p{Mn} | \p{Non_Spacing_Mark} | lisätty merkki yhdistettäväksi muiden merkkien kanssa ilman ylimääräistä leveyttä |
\p{Mc} | \p{Spacing_Combining_Mark} | lisätyt merkit yhdistettäväksi muiden merkkien kanssa ja vievät ylimääräistä leveyttä (kuten monissa itämaisissa kielissä) |
\p{Me} | \p{Enclosing_Mark} | hahmoja, jotka kietoutuvat hahmoon. Esimerkiksi ympyrä, neliö jne. |
Välit ja erottimet | ||
\p{Z} | \p{Separator} | kaikenlaisia välilyöntejä tai näkymättömiä erottimia |
\p{Zs} | \p{Space_Separator} | välilyöntejä, jotka ovat näkymättömiä, mutta joilla on leveys |
\p{Zl} | \p{Line_Separator} | rivierotussymboli U+2028 |
\p{Zp} | \p{Paragraph_Separator} | kappalemerkki U+2029 |
Matemaattiset symbolit | ||
\p{S} | \p{Symbol} | matemaattiset symbolit, valuuttasymbolit, pseudografiset symbolit (kehykset) jne. |
\p{Sm} | \p{Math_Symbol} | mitkä tahansa matemaattiset symbolit |
\p{Sc} | \p{Currency_Symbol} | kaikki valuuttasymbolit |
\p{Sk} | \p{Modifier_Symbol} | yhdistetty merkki (merkki) itse merkin ja merkkimerkin yhdistelmänä |
\p{So} | \p{Other_Symbol} | erilaisia symboleja, ei-matemaattisia, ei-valuuttasymboleja tai niiden yhdistelmiä |
Numeeriset merkit | ||
\p{N} | \p{Number} | kaikenlaisia digitaalisia merkkejä millä tahansa kielillä |
\p{Nd} | \p{Decimal_Digit_Number} | numeroita nollasta yhdeksään kaikilla kielillä |
\p{Nl} | \p{Letter_Number} | numero, joka voi näyttää kirjaimista, kuten roomalaisista numeroista |
\p{No} | \p{Other_Number} | numero, joka esitetään ylä- tai alaindeksinä, tai numero, joka ei koostu numeroista (pois lukien numerot ideografisista kirjoituksista) |
Välimerkit | ||
\p{P} | \p{Punctuation} | kaikenlaisia välimerkkejä |
\p{Pd} | \p{Dash_Punctuation} | mikä tahansa yhdysmerkki tai viiva |
\p{Ps} | \p{Open_Punctuation} | kaikenlaiset avaussulut |
\p{Pe} | \p{Close_Punctuation} | kaikenlaiset sulkusulut |
\p{Pi} | \p{Initial_Punctuation} | kaikenlaisia aloituslainauksia |
\p{Pf} | \p{Final_Punctuation} | kaikenlaiset loppulainaukset |
\p{Pc} | \p{Connector_Punctuation} | välimerkkejä, kuten alaviivoja tai sanayhdistelmiä |
\p{Po} | \p{Other_Punctuation} | kaikenlaiset välimerkit, jotka eivät ole pisteitä, sulkumerkkejä, lainausmerkkejä tai liittimiä |
Ohjaushahmot | ||
\p{C} | \p{Other} | näkymättömät ohjausmerkit ja käyttämättömät paikat |
\p{Cc} | \p{Control} | ASCII- tai Latin-1-ohjausmerkit: 0x00-0x1F ja 0x7F-0x9F |
\p{Cf} | \p{Format} | näkymättömät muotoiluilmaisimet |
\p{Co} | \p{Private_Use} | kaikki henkilökohtaiseen käyttöön varatut paikat |
\p{Cs} | \p{Surrogate} | puolet UTF-16:lla koodatuista korvikepareista |
\p{Cn} | \p{Unassigned} | kaikki paikat, joille ei ole määritetty symboleja |
Joissakin tapauksissa on kätevää käyttää säännöllisiä lausekkeita analysoimaan tekstinpätkiä luonnollisella kielellä , toisin sanoen ihmisten kirjoittamia, ja joissa saattaa olla kirjoitusvirheitä tai epätyypillisiä sanankäyttöjä. Jos esimerkiksi suoritat kyselyn (esim. verkkosivustolla) "mitä metroasemaa käytät", saattaa käydä ilmi, että vierailijat voivat merkitä "Nevski Prospekt" seuraavasti:
Tavallisia säännöllisiä lausekkeita ei tässä voida soveltaa, mikä johtuu ensisijaisesti siitä, että kaavoihin sisältyvät sanat eivät välttämättä täsmää kovin tarkasti (sumea), mutta siitä huolimatta olisi kätevää kuvata kuvion elementtien välisiä rakenteellisia riippuvuuksia. säännöllisillä lausekkeilla, esimerkiksi meidän tapauksessamme, osoittavat, että vastaavuus voi olla näytteen "Nevski Prospekt" TAI "Griboedov Canal" kanssa, lisäksi "Prospekti" voi olla lyhennetty "pr" tai poissa ja lyhenne "Eb. " voidaan sijoittaa ennen "kanavaa".
Tämä tehtävä on samanlainen kuin kokotekstihaku , eroaa siinä, että tässä lyhyttä fragmenttia on verrattava joukkoon kuvioita, ja koko tekstihaussa kuvio on päinvastoin yleensä yksi, kun taas tekstifragmentti on erittäin suuri , tai leksikaalinen yksiselitteisyysongelma , joka ei kuitenkaan salli strukturointisuhteiden määrittämistä kuvioelementtien välillä.
On olemassa pieni määrä kirjastoja , jotka toteuttavat säännöllisen lausekkeen mekanismin, jossa on mahdollisuus sumeaan vertailuun:
Muodolliset kielet ja viralliset kieliopit | |
---|---|
Yleiset käsitteet | |
Tyyppi 0 | |
Tyyppi 1 |
|
Tyyppi 2 | |
Tyyppi 3 |
|
jäsentäminen |