+
Regularni izraz (, pogosto okrajšan v regex ali regexp), včasih tudi racionalni izraz (rational expression) je niz znakov, ki definira splošen iskalni vzorec v algoritmu za iskanje ali validiranje nizov. Skladnja regularnih izrazov je standardizirana in oblikovana za jedrnatost ter fleksibilnost, v obliki, ki jo je enostavno natipkati s tipkovnico s standardnim naborov znakov ASCII.
Vsak znak v regularnem izrazu je bodisi metaznak s posebnim pomenom, bodisi navaden znak z dobesednim pomenom. Za primer, v izrazu a. je »a« navaden znak, ».« pa metaznak, ki vrne ujemanje z vsakim znakom razen s prelomom vrstice. Izraz a. se bo torej ujemal z nizi »a «, »aX« ali »a0«, ne pa z »bX« ali »Xa«. S kombiniranjem navadnih in metaznakov lahko torej programer izdela regularen izraz, ki se bo ujemal s točno določenim nizom ali zelo splošnim vzorcem znakov v nizu, algoritem pa bo z njim procesiral posredovane nize in zaznal ujemanje ali ne. Po podobnem načelu delujejo nadomestni znaki (wildcard), ki pa so precej bolj omejeni z vzorci in imajo manjši nabor metaznakov (znan zgled je zvezdica *).
Regularni izrazi se rabijo za raznovrstne namene pri obdelavi besedil ali drugih znakovnih nizov, denimo za iskanje in zamenjavo v oblikovalnikih in urejevalnikih besedil, splošnejših poizvedbah v iskalnikh ter za leksikalno analizo. Zmožnost ponujajo mnogi programski jeziki, bodisi že vgrajeno, bodisi s standardnimi knjižnicami.
Skladnja
Vzorec (pattern), ki se ujema s tarčnim (znakovnim) nizom (string), je sestavljen iz zaporedja atomov. Atom je točka v vzorcu, ki jo algoritem primerja s tarčnim znakovnim nizom. Najpreprostejši atom je dobeseden, možno pa je tudi združevati dele vzorca za ujemanje z atomom, v tem primeru je nujna raba ( ) kot metaznakov. Metaznaki tvorijo atome, kvantifikatorje, ki določajo število atomov, logični znak OR za skupek alternativ, logični znak NOT, ki negira atom, in povratne sklice. Ujemanje se zgodi, ko se ujemajo vsi atomi regexovega vzorca.
Obstaja približno 14 metaznakov (odvisno od procesorja), ki imajo svoj dobesedni pomen ali ne v odvisnosti od konteksta ali prisotnosti ubežnega znaka, ki je v regularnih izrazih leva poševnica \. Običajno so metaznaki {}[]()^$.|*+? in \, dobesedni znaki, ki se spremenijo v metaznake ob ubežnem znaku, pa dswDSW in N.
Osnovni koncepti
Vzorec definira množico znakovnih nizov, ki zadostujejo podanim kriterijem. V najenostavnejši obliki lahko definira končno množico z naštevanjem njenih elementov, toda običajno obstaja bolj zgoščena oblika; za primer, množico treh znakovnih nizov »Handel«, »Händel« in »Haendel« se lahko definira bodisi z naštevanjem (Handel)|(Händel)|(Haendel), bodisi zgoščeno s H(ä|ae?)ndel. Na ta način se vzorec ujema s katerimkoli od teh treh znakovnih nizov.
Večina izvedb vsebuje naslednje operacije za izdelavo regularnih izrazov:
Logični OR Navpičnica ločuje alternative. Za primer, se ujema z »Matija« in »Mateja«
Združevanje Oklepaji se med drugim rabijo za določanje obsega in vrstnega reda operatorjev. Ekvivalent zgornjemu zgledu je Mat(i|e)ja
Kvantifikacija Kvantifikator na mestu za elementom (kot je znak) ali skupino določa, kolikokrat se lahko predhodni element pojavi. {| | style="width:15px; vertical-align:top;" | ? | Vprašaj označuje nič ali eno ponovitev predhodnega elementa. Za primer, Hae?ndel se ujema s »Handel« in »Haendel«. |- | style="vertical-align:top;" | * | Zvezdica označuje nič ali več ponovitev predhodnega elementa. Za primer, ab*c se ujema z »ac«, »abc«, »abbc«, »abbbc« itd. |- | style="vertical-align:top;" | + | Plus označuje eno ali več ponovitev predhodnega elementa. Za primer, ab+c se ujema z »abc«, »abbc«, »abbbc« itd., ne pa z »ac«. |- |{n} | Predhodni element se ujema točno n-krat. |- |{min,} | Predhodni element se ujema vsaj min-krat. |- |{min,max} | Predhodni element se ujema vsaj min-krat, ne pa več kot max-krat.
Nadomestni znak Nadomestni znak . se ujema s katerimkoli znakom. Za primer, a.b se ujema s katerimkoli znakovnim nizom, ki se začne z »a«, nadaljuje z enim poljubnim znakom in konča z »b«. a.*b se ujema z znakovnim nizom, ki se začne z »a« in vsebuje »b« na neki kasnejši lokaciji.
Ti konstrukti se lahko kombinirajo za izdelavo poljubno kompleksnih izrazov, podobno kot matematične operacije iz številk in operatorjev +, −, × ter ÷. Za primer, tako H(ae?|ä)ndel kot sta veljavna vzorca, ki se ujemata z istimi znaovnimi nizi kot prejšnji zgled H(ä|ae?)ndel.
Glej tudi
grep
Sklici
Kategorija:Formalni jeziki Kategorija:Programski konstrukti