Shprehje e rregullt

Në teorinë e shkencave kompjuterike dhe në teorinë e gjuhës formale, Shprehjet e rregullta (regular expression, regex) janë sekuenca të karakterëve që formojnë një model kërkimi, kryesisht për përdorim të modelit të koordinimit me string, p.sh me operacionet "gjej dhe zëvendeso".

Koncepti lindi në vitet 1950, kur matematicienti Stephen Kleene bëri përshkrimin e gjuhës së rregullt. Çdo karakter në shprehjet e rregullta kuptohet si një metakarakter me një kuptim te veçant, ose si një karakter i rregullt me kuptim të sakt. Së bashku ato mund të përdoren për të identifikuar materialin tekstual të modelit të dhënë, ose të procesojë një numër të instancave të cilat mund të ndryshojnë nga një barazi e sakt deri në ngjajshmëri gjenerale të modelit.

Sekuenca e modelit është një shprehje e cila është e dizajnuar në një gjuhë për të paraqitur shënjestrat e përshkruara në mënyren më fleksibile. Mënyra më e thjesht për të përdorur shprehjet e rregullta do të ishte nëse do të përdorej e njejta fjalë e cila shqiptohet në dy mënyra te ndrsyhme. Gjithashtu edhe wildcard mundet t'i arrijë këto, por wildcard dallojnë nga shprehjet e rregullta sepse wildcard janë më të kufizuar në bazë se çfarë mund të marrin si model.

Shprehjet e rregullta janë shumë të dobishme në informatikë. Sistemtet e ndryshme për të përcaktuar shprehje te rregullta kane evoluar për të siguruar dy standardet themelore për gramatikë dhe sintaksë. Procesori i shprehjeve të rregullta gjindet në disa paisje kërkuese, në dialogjet për kërkim dhe zëvendësim të procesorëve të fjalëve dhe redaktorëve të tekstit.

Historia
Shprehjet e rregullta origjinalitetin e kanë nga viti 1956, ku matematicienti Stephen Cole Kleene përshkroi gjuhën e rregullt duke përdorur notacione matematikore të cilat i quajti bashkësi te rregullta. Këto linden në teorinë e shkencave kompjuterike, nënfusha të teorisë automata dhe në përshkrimin dhe klasifikimin e gjuhëve formale. Shprehjet e rregullta u popullarizuan nga viti 1968 për dy përdorime: në modelin e koordinimit në editim të teksteve dhe analiza leksikore në një kompajllues. 

Sot Shprehjet e rregullta jane të përkrahura gjithandej në gjuhët programuese, në procesim të programit të teksteve, tekst editorëve të avancuar, dhe në disa programe tjera. Përkrahja e shprehjeve të rregullta është edhe pjesë e librarisë standarde të shumë gjuhëve programuese duke e përfshire Java dhe Python, dhe e ndertuar edhe në sintaksen e të tjerave, duke përfshirë Perl dhe ECMAScript. 

Impelementimi i shprehjes se rregullt shpesh quhet edhe mekanizmi (engine) i shprehjes së rregult, dhe një numër i librarive janë në dispozicion per tu ripërdorur.

Klasat e karaktereve
Klasat e karaktereve janë koncepti bazë i shprehjeve të rregullta në koordinimin literal. Ajo bën që një sekuencë e vogël të koordinohet me një bashkësi të madhe të karaktereve. P.sh [a-z] mund të qëndroj për alfabet, dhe \d mund të ketë kuptimin e çfarëdo shifre.

Klasët e karaktereve mund te zbatohen ne dy levele POSIX. POSIX standardet definojnë klasën e karaktereve, e cila do të njihet nga procesorët e shprehjeve të rregullta që janë instaluar. Ato definicione janë në tabelën në vijim:
 POSIX  Jo-standard  Perl/Tcl  Vim  ASCII  Përshkrimi [:alnum:] [A-Za-z0-9] Karakteret alfanumerik [:word:] \w \w [A-Za-z0-9_] Karakteret alfanumerik dhe "_" \W \W [^A-Za-z0-9_] Karakteret jo-fjalë [:alpha:] \a [A-Za-z] Karakteret alfabetike [:blank:] \s [ \t] Hapësira dhe tabi \b \< \> (?<=\W)(?=\w)|(?<=\w)(?=\W) Kufinjtë e fjalëve [:cntrl:] [\x00-\x1F\x7F] Karakteret kontrolluese [:digit:] \d \d [0-9] Shifrat \D \D [^0-9] Jo-shifrat [:graph:] [\x21-\x7E] Karakteret e dukshme [:lower:] \l [a-z] Shkronjat e vogla [:print:] \p [\x20-\x7E] Karakteret e dukshme dhe hapësira [:punct:] [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] Shenjat e pikësimit [:space:] \s \_s [ \t\r\n\v\f] Karakteret hapësirë \S [^ \t\r\n\v\f] Karakteret jo-hapësirë [:upper:] \u [A-Z] Shkronjat e mëdha [:xdigit:] \x [A-Fa-f0-9] Shifrat heksadecimale