Regulaaravaldis

Regulaaravaldis (ingl. k. regular expression, regex või regexp) on teoreetilises informaatikas sümbolitest koosnev otsingumuster. Tavaliselt kasutatakse sellist mustrit sõnedes otsingu- ja/või asendusoperatsioonideks.
Regulaaravaldisi kasutatakse otsingumootorites, tekstiredaktorite otsimis- ja asendamisdialoogides, tekstitöötlustööriistades nagu sed ja AWK ning leksilises analüüsis. Regulaaravaldiste tugi on enamikus programmeerimiskeeltest sisseehitatud või saadaval teekidega. Regulaaravaldiste kirjutamiseks on erinevaid süntakse, näiteks POSIX standard ja laialdaselt levinud Perli süntaks.

Mustrid

Regulaaravaldistega kirjeldatakse otsingumustreid. Selleks kasutatavad sümbolid on kas metamärgid (erilise tähendusega) või tavalised sümbolid (otsese tähendusega). Näiteks regulaaravaldises a. tähistab a tähelist vastavust 'a' ning . metamärki, mis sobitub kõikide sümbolitega väljaarvatud reavahetusega. Seega, see regulaaravaldis sobituks näiteks sõnedega a  või ax või a0. Mustrisobituse vastete võimalikku täpsust saabki reguleerida metamärkide kasutusega. Näieks on . väga üldine muster, [a-z] (sobivad kõik tähed a kuni z) on vähem üldisem ning a on väga täpne muster (sobib vaid a). Metamärkide süntaks on loodud lihtsaks ja paindlikuks tekstitöötluse automatiseerimiseks, kujul, mida on lihtne tavalisel ASCII klaviatuuril kirjutada.
Väga lihtne näide sellisest regulaaravaldisest oleks leida tekstiredaktoris sama sõna mitme erineva kirjapildiga. Näiteks Helsin[gk]i sobitub nii sõnaga "Helsingi" kui ka sõnaga "Helsinki".

Ajalugu

Regulaaravaldised pärinevad aastast 1951, mil matemaatik Stephen Cole Kleene kirjeldas regulaarkeeli ning kasutas selleks matemaatilist kirjapilti, mida kutsus siis regulaarhulkadeks. Üks varasemaid mustrisobituse implementatsioone realiseeriti SNOBOL keeles, mis kasutas regulaaravaldiste asemel küll oma mustrisobituskonstrukte.
Regulaaravaldised muutusid eriti populaarseks 1968. aastast kahes kasutusvaldkonnas: mustrisobitus tekstiredaktorites ja leksiline analüüs kompilaatorites. Üks esimesi regulaaravaldiste realisatsioone oli Ken Thompsoni QED redaktorisse lisatud tekstifailide mustriotsing, mis kasutas parema jõudluse eesmärgil sünkroonkompilaatorit. Hiljem lisas ta selle tööriista ka Unixi redaktorisse ed, millest inspireerituna loodi ka tänapäeval populaarne otsingutööriist grep. Samal ajal kui Thompson arendas QEDi, implementeerisid teadlased, sh Douglas T. Ross regulaaravaldistel põhinevat leksilise analüüsi tööriista, mida kasutatakse kompilaatoriidisainis.
1970. aastatel kasutasid mitmed Unix programmid (nt vi, lex, sed, AWK ja expr) erinevaid regulaaravaldiste variatsioone. Ajapikku võeti kasutusele järjest rohkem erinevaid avaldisi. Need algsed mustrite kujud standardiseeriti POSIX.2 standardiga 1992. aastal.
1980. aastatel tõusid Perlis esile keerulisemad regulaaravaldised, mis tulenesid algselt Henry Spenceri loodud regulaaravaldiste teegist. Spenceri hilisemat parema jõudluse ja Unicode toega teeki Tcl-ile kasutatakse muuhulgas ka PostgreSQLis.
1997. aastast on Philip Hazel arendanud PCRE teeki C-keelele, mis üritab matkida Perli regulaaravaldiste funktsionaalsust. Seda kasutatakse paljudes tänapäevastes tööriistades, muuhulgas ka PHPs ja Apache HTTP Serveris.
Tänapäeval on regulaaravaldised laialdaselt toetatud programmeerimiskeeltes, tekstitöötlusprogrammides ja -redaktorites ning mujal. Regulaaravaldised on paljude programmeerimiskeelte standardteegis, näiteks Javas ja Pythonis, ning osal keeltest süntaksis, näiteks Perlis ja ECMAScriptis. Regulaaravaldiste funktsionaalsuse implementatsioone kutsutakse tihti regulaaravaldise mootoriks ning mitmeid teeke saab mitmeotstarbeliselt kasutada.