b'\n_START_ARTICLE_\nS\xc3\xa4\xc3\xa4nn\xc3\xb6llinen lauseke\n_START_PARAGRAPH_\nS\xc3\xa4\xc3\xa4nn\xc3\xb6llinen lauseke (engl. regular expression, lyhyesti regexp tai regex) on tietojenk\xc3\xa4sittelyteoriassa lauseke, joka m\xc3\xa4\xc3\xa4rittelee s\xc3\xa4\xc3\xa4nn\xc3\xb6llisen kielen. Kieli tarkoittaa t\xc3\xa4ss\xc3\xa4 yhteydess\xc3\xa4 joukkoa merkkijonoja. S\xc3\xa4\xc3\xa4nn\xc3\xb6llinen kieli on yksinkertaisin Noam Chomskyn neliportaisessa kielioppien hierarkiassa. S\xc3\xa4\xc3\xa4nn\xc3\xb6lliset kielet voidaan tunnistaa \xc3\xa4\xc3\xa4rellisill\xc3\xa4 automaateilla. \xc3\x84\xc3\xa4rellinen automaatti on malli tietokoneelle, joka saa sy\xc3\xb6tteen merkki kerrallaan, eik\xc3\xa4 voi kelata sy\xc3\xb6tett\xc3\xa4 edestakaisin. \xc3\x84\xc3\xa4relliset automaatit ovat silti hy\xc3\xb6dyllisi\xc3\xa4 monissa asioissa, kuten tekstialkioiden tunnistuksessa tai tietoliikenteess\xc3\xa4 tila-automaateissa. S\xc3\xa4\xc3\xa4nn\xc3\xb6llisten lausekkeiden t\xc3\xa4rkein k\xc3\xa4ytt\xc3\xb6kohde on tarkastella, kuuluuko jokin merkkijono lausekkeen m\xc3\xa4\xc3\xa4ritt\xc3\xa4m\xc3\xa4\xc3\xa4n kieleen._NEWLINE_Useat ohjelmointikielet ja ohjelmat sis\xc3\xa4lt\xc3\xa4v\xc3\xa4t mahdollisuuden t\xc3\xa4h\xc3\xa4n._NEWLINE_Ohjelmoinnissa t\xc3\xa4m\xc3\xa4 voi esimerkiksi tarkoittaa sit\xc3\xa4, ett\xc3\xa4 k\xc3\xa4ytt\xc3\xa4j\xc3\xa4n antama sy\xc3\xb6te voidaan tarkastaa tai muotoilla toisenlaiseksi. Esimerkiksi turvallisten salasanojen luominen tarkastetaan n\xc3\xa4in. S\xc3\xa4\xc3\xa4nn\xc3\xb6llinen lauseke voi esimerkiksi tarkastaa onko salasanassa: tarpeeksi merkkej\xc3\xa4, ainakin 2 isoa kirjainta ja 1 erikoismerkki. S\xc3\xa4\xc3\xa4nn\xc3\xb6lliset lausekkeet ovat my\xc3\xb6s yleisi\xc3\xa4 verkko-osoitteiden muotoilussa. Kirjoitettu teksti saatetaan muotoilla automaattisesti linkiksi, ilman ett\xc3\xa4 k\xc3\xa4ytt\xc3\xa4j\xc3\xa4n tarvitsee tehd\xc3\xa4 sit\xc3\xa4._NEWLINE_Esimerkki linkin muotoilusta PHP:ssa:_NEWLINE_ $teksti = "Vain teksti\xc3\xa4, http://www.wikipedia.org, muunna minut linkiksi. \xc3\x84l\xc3\xa4 muotoile minua: www.esimerkki";_NEWLINE_ $teksti = preg_replace(\'#http://[a-z0-9._/-]+#i\', \'<a href="$0">$0</a>\', $teksti);\n_START_SECTION_\nM\xc3\xa4\xc3\xa4rittely\n_START_PARAGRAPH_\nKieleen kuuluu aina aakkosto, jota merkit\xc3\xa4\xc3\xa4n \xce\xa3:lla (Sigma). Aakkosto on joukko-opin alkioiden joukko. Yleisess\xc3\xa4 tapauksessa se voi olla ASCII tai Unicode-merkist\xc3\xb6. Kaikkia \xce\xa3:sta muodostettavia merkkijonoja merkit\xc3\xa4\xc3\xa4n \xce\xa3*:ll\xc3\xa4. Tyhj\xc3\xa4\xc3\xa4 merkkijonoa merkit\xc3\xa4\xc3\xa4n \xce\xb5:lla (epsilon)._NEWLINE_On huomattava, ett\xc3\xa4 yleens\xc3\xa4 k\xc3\xa4yt\xc3\xa4nn\xc3\xb6llisiss\xc3\xa4 ohjelmointikieliss\xc3\xa4 ei k\xc3\xa4ytet\xc3\xa4 merkkej\xc3\xa4 \xce\xa3 tai \xce\xb5. N\xc3\xa4it\xc3\xa4 erikoismerkkej\xc3\xa4 k\xc3\xa4ytet\xc3\xa4\xc3\xa4n t\xc3\xa4ss\xc3\xa4 s\xc3\xa4\xc3\xa4nn\xc3\xb6llisten lausekkeiden teoreettisessa tarkastelussa (alla), mutta ohjelmien l\xc3\xa4hdekoodissa on tavallisesti erilainen, tavallisiin ASCII-merkkeihin perustuva syntaksi s\xc3\xa4\xc3\xa4nn\xc3\xb6llisten lausekkeiden esitt\xc3\xa4miseen._NEWLINE_Esimerkkej\xc3\xa4:_NEWLINE_{a}* = { \xce\xb5, "a", "aa", "aaa", "aaaa", ... }_NEWLINE_{0, 1}* = { \xce\xb5, 0, 1, 00, 01, 10, 11, 000, 001, 010, ... }_NEWLINE_Kieli on mik\xc3\xa4 tahansa \xce\xa3*:n osajoukko. Kieli on \xc3\xa4\xc3\xa4rellinen, jos siihen kuuluu vain \xc3\xa4\xc3\xa4rellinen m\xc3\xa4\xc3\xa4r\xc3\xa4 merkkijonoja. \xc3\x84\xc3\xa4rellisen kielen voi m\xc3\xa4\xc3\xa4ritell\xc3\xa4 luettelemalla kaikki siihen kuuluvat merkkijonot, \xc3\xa4\xc3\xa4rett\xc3\xb6m\xc3\xa4lle kielelle t\xc3\xa4m\xc3\xa4 ei onnistu. S\xc3\xa4\xc3\xa4nn\xc3\xb6llinen lauseke on er\xc3\xa4s yksinkertainen tapa m\xc3\xa4\xc3\xa4ritell\xc3\xa4 mahdollisesti \xc3\xa4\xc3\xa4ret\xc3\xb6n m\xc3\xa4\xc3\xa4r\xc3\xa4 merkkijonoja._NEWLINE_M\xc3\xa4\xc3\xa4ritell\xc3\xa4\xc3\xa4n operaattorit:_NEWLINE_*   toisto, edelt\xc3\xa4v\xc3\xa4 symboli 0-n kertaa_NEWLINE_|   tai, jompikumpi symboli_NEWLINE_Esimerkkej\xc3\xa4, kirjaimet ovat metakielen symboleita, jotka vastaavat yksitt\xc3\xa4isi\xc3\xa4 kirjaimia. a = "a", jne._NEWLINE_a  = { a }_NEWLINE_ab = { ab }_NEWLINE_a* = { \xce\xb5, a, aa, aaa, ... } eli a* vastaa tyhj\xc3\xa4\xc3\xa4_NEWLINE_     merkkijonoa ja merkkijonoja "a", "aa", "aaa", jne._NEWLINE_a|b = { a, b } merkkijono "a" tai "b"_NEWLINE_ab|cd* = { ab, c, cd, cdd, cddd, ... }_NEWLINE_Lis\xc3\xa4ksi m\xc3\xa4\xc3\xa4ritell\xc3\xa4\xc3\xa4n lyhennysmerkinn\xc3\xa4t:_NEWLINE_a\xe2\x81\xbf   symboli toistettuna n kertaa._NEWLINE_a+   symboli 1-n kertaa._NEWLINE_N\xc3\xa4m\xc3\xa4 eiv\xc3\xa4t ole s\xc3\xa4\xc3\xa4nn\xc3\xb6llisi\xc3\xa4 lausekkeita, vain lyhenteit\xc3\xa4._NEWLINE_Esimerkiksi:_NEWLINE_a\xe2\x81\xb4 = aaaa_NEWLINE_(ab)\xc2\xb2 = abab_NEWLINE_a\xe2\x81\xbfb\xe2\x81\xbf laiton, n ei voi olla parametri._NEWLINE_N\xc3\xa4ill\xc3\xa4 merkinn\xc3\xb6ill\xc3\xa4 voidaan ilmaista s\xc3\xa4\xc3\xa4nn\xc3\xb6llinen kieli, johon kuuluu \xc3\xa4\xc3\xa4ret\xc3\xb6n m\xc3\xa4\xc3\xa4r\xc3\xa4 merkkijonoja. Deterministinen \xc3\xa4\xc3\xa4rellinen automaatti pystyy tunnistamaan s\xc3\xa4\xc3\xa4nn\xc3\xb6llisten lausekkeiden m\xc3\xa4\xc3\xa4rittelem\xc3\xa4t kielet. Eri ohjelmien ja ohjelmointikielten tuntemat lausekkeet eroavat toisistaan, klassinen Unix grep on toteutettu deterministisell\xc3\xa4 \xc3\xa4\xc3\xa4rellisell\xc3\xa4 automaatilla ja sen tuntema kieli on l\xc3\xa4hes t\xc3\xa4m\xc3\xa4 laajennettuna muutamilla operaattoreilla. Useiden ohjelmien tuntema kieli ei ole en\xc3\xa4\xc3\xa4 s\xc3\xa4\xc3\xa4nn\xc3\xb6llinen, mutta samankaltaisuuden vuoksi n\xc3\xa4ist\xc3\xa4 lausekkeista k\xc3\xa4ytet\xc3\xa4\xc3\xa4n nime\xc3\xa4 laajennetut s\xc3\xa4\xc3\xa4nn\xc3\xb6lliset lausekkeet.\n_START_SECTION_\nSovelluksia\n_START_PARAGRAPH_\nUnix-ty\xc3\xb6kaluohjelmaa grep k\xc3\xa4ytet\xc3\xa4\xc3\xa4n merkkijonojen etsimiseen tiedostoista hy\xc3\xb6dynt\xc3\xa4en s\xc3\xa4\xc3\xa4nn\xc3\xb6llisi\xc3\xa4 lausekkeita._NEWLINE_PHP-kieless\xc3\xa4 on funktioita s\xc3\xa4\xc3\xa4nn\xc3\xb6llisten lausekkeiden k\xc3\xa4ytt\xc3\xb6\xc3\xa4 varten (mm. preg_match ja preg_replace).'