Regulárny výraz

Regulárny výraz (skrátene aj regexp, regex alebo RE z ) je textový reťazec, obsahujúci vyhľadávací vzor, ktorý popisuje celú množinu reťazcov (formálny jazyk), na základe určitých syntaktických pravidiel. Predstavuje úsporný zápis regulárnej gramatiky z teórie formálnych jazykov, regulárnymi výrazmi sú teda popísateľné práve regulárne jazyky, t. j. jazyky, akceptovateľné konečnostavovým automatom.
Regulárne výrazy sú používané v mnohých textových editoroch a nástrojoch na hľadanie a manipuláciu s textom podľa vzorov. Mnoho programovacích jazykov podporuje regulárne výrazy na prácu s reťazcami. Napríklad Perl a Tcl majú zabudovanú silnú podporu pre regulárne výrazy priamo v svojej syntaxi. Implementácie regulárnych výrazov, odvodených od Perl syntaxe existujú aj pre jazyky C, C++, C#, Java, JavaScript, Python, PHP a ďalšie. Množstvo nástrojov príkazového riadku (vrátane filtra grep a dávkového editora sed) poskytovaných pôvodne unixovými operačnými systémami, z ktorých sa neskôr ďalej rozšírili, masívne využíva regulárne výrazy.
Dejiny.
Vznik pojmu a konceptu regulárnych výrazov sa datuje do roku 1951, kedy americký matematik Stephen Cole Kleene v rámci práce, venovanej McCulloch-Pittsovým neurónovým sieťam, formálne opísal regulárne jazyky (ktoré v práci nazýval "regulárne udalosti", angl. "regular events") a dokázal ekvivalenciu triedy jazykov, popísateľných regulárnymi výrazmi s triedou jazykov, akceptovateľných konečnostavovými automatmi.
V druhej polovici 60. rokov pracoval americký informatik a spolutvorca operačného systému Unix Ken Thompson na reimplementácii riadkovo orientovaného textového editora QED (predchodca editorov ed, vi a vim) pre viacpoužívateľský operačný systém so zdieľaním času CTSS, v rámci ktorej do editora zapracoval aj podporu regulárnych výrazov. Šlo o jedno z prvých využití regulárnych výrazov v softvéri pre širšiu používateľskú základňu. V roku 1971 získala spoločnosť Bell Labs na Thompsonov algoritmus hľadania vzorov v texte prostredníctvom regulárnych výrazov aj patent, podaný ešte v roku 1967.
V roku 1971 potom s podporou regulárnych výrazov nasledoval editor ed (Ken Thompson), v roku 1973 filter grep (Ken Thompson) a v roku 1974 neinteraktívny dávkový editor sed (Lee McMahon), všetko rovnako v rámci Bell Labs, úzko previazené so vznikom Unixu.
V roku 1986 vyvinul kanadský programátor Henry Spencer knižnicu "regex", ktorá poslúžila ako základ pre podporu regulárnych výrazov vo vznikajúcom skriptovacom jazyku Perl (Larry Wall, 1988). Popularita Perlu prudko vzrástla v 90. rokoch, počnúc verziou 5.0, na čom sa významnou mierou podpísala aj podpora regulárnych výrazov s vyššou expresivitou, než poskytovali iné dobové jazyky a nástroje.
V roku 1997 vznikla multiplatformná knižnica PCRE (vyvinutá pôvodne pre mailový server Exim), umožňujúca integrovať podporu Perl-kompatibilných regulárnych výrazov do softvéru tretích strán. Knižnicu využili napr. webový server Apache, webový skriptovací jazyk PHP a ďalšie významné projekty, čo spolu s popularitou Perlu prispelo k tomu, že sa Perl-kompatibilná syntax regulárnych výrazov stala de facto štandardnou aj pre ich mnohé ďalšie implementácie v programovacích jazykoch a iných softvérových projektoch.
Využitie.
Medzi základné spôsoby využitia regulárnych výrazov patrí:
Aplikácie.
Medzi konkrétne aplikácie regulárnych výrazov patrí napr.:
Syntax.
Pre formálnu, matematickú definíciu, využívanú v prácach z oblasti teórie formálnych jazykov, pozri napr. zdroj .
Väčšina praktických implementácií regulárnych výrazov (POSIX, grep, sed, Perl, PCRE, Java, JavaScript, .NET) vychádza z nasledovnej syntaxe:
Triedy znakov.
Pre zjednodušenie špecifikácie tried znakov v regulárnych výrazoch existujú vo väčšine implementácií aj preddefinované pomenované triedy. V nasledujúcej tabuľke je základný zoznam a stručný popis tried, pochádzajúcich pôvodne z Perlu a následne prevzatých do knižnice PCRE a ďalších odvodených implementácií. POSIX regulárne výrazy používajú pre pomenované triedy inú syntax.