<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.multimediaexpo.cz/mmecz/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Regul%C3%A1rn%C3%AD_v%C3%BDraz</id>
		<title>Regulární výraz - Historie editací</title>
		<link rel="self" type="application/atom+xml" href="http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Regul%C3%A1rn%C3%AD_v%C3%BDraz"/>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Regul%C3%A1rn%C3%AD_v%C3%BDraz&amp;action=history"/>
		<updated>2026-06-12T01:57:08Z</updated>
		<subtitle>Historie editací této stránky</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Regul%C3%A1rn%C3%AD_v%C3%BDraz&amp;diff=290912&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Regul%C3%A1rn%C3%AD_v%C3%BDraz&amp;diff=290912&amp;oldid=prev"/>
				<updated>2013-08-27T08:58:20Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 27. 8. 2013, 08:58&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Regul%C3%A1rn%C3%AD_v%C3%BDraz&amp;diff=290911&amp;oldid=prev</id>
		<title>Sysop: + Vylepšení</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Regul%C3%A1rn%C3%AD_v%C3%BDraz&amp;diff=290911&amp;oldid=prev"/>
				<updated>2011-05-11T18:42:25Z</updated>
		
		<summary type="html">&lt;p&gt;+ Vylepšení&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Regulární výraz''' (zkracováno na '''regexp''', '''regex''' či jen '''RE''' podle anglického ''{{cizojazyčně|en|regular expression}}'') je [[textový řetězec|řetězec]] popisující celou [[množina|množinu]] řetězců, konkrétně [[regulární jazyk]]. Představil je americký matematik Steven Kleene.&amp;lt;ref&amp;gt;http://phpfashion.com/regularni-korektura-intervalu-cz&amp;lt;/ref&amp;gt;&lt;br /&gt;
Regulární výrazy mohou pro hledání podporovat i jiné programy, například propracovanější textové editory nebo souborové manažery. Nejčastěji jsou ale podporovány v [[počítačový program|počítačových programech]] a [[skriptovací jazyk|skriptovacích jazycích]] formou externí knihovny nebo sady funkcí.&lt;br /&gt;
Nejčastější využití je:&lt;br /&gt;
* vyhledávání textu&lt;br /&gt;
** buď prosté zjištění, zdali vstupní text vyhovuje zadanému regulárnímu výrazu, nebo&lt;br /&gt;
** zjištění offsetu (pozice) ve vstupním textu, kde shoda s regulárním výrazem začíná&lt;br /&gt;
* manipulace s textem&lt;br /&gt;
** záměna textu v jednom z podvýrazů ''regexu''&lt;br /&gt;
** extrakce všech shod s regulárním výrazem do předané proměnné&lt;br /&gt;
Pokud chce uživatel v textu vyhledat nějaký řetězec, který nezná přesně nebo který může mít více podob, může zadat regulární výraz, který postihne všechny požadované varianty. Program tak nalezne všechny části textu, které danému výrazu odpovídají.&lt;br /&gt;
Regulární výraz se skládá z [[literál]]ů textu, které se mají shodovat, a speciálních znaků, které nejsou součástí hledaného textu, sloužících pro popis alternativ, množin, počtů výskytů a přepínačů.&lt;br /&gt;
== Formální definice ==&lt;br /&gt;
Formálně je regulární výraz definován následujícím způsobem:&lt;br /&gt;
# ''a'' je regulární výraz pro libovolný [[literál]] (znak abecedy, popř. prázdný symbol ε) ''a'', popisující právě text ''a''.&lt;br /&gt;
# Pokud ''A'' a ''B'' jsou regulární výrazy, je ''AB'' regulární výraz, popisující zřetězení textů popsaných výrazy ''A'' a ''B''.&lt;br /&gt;
# Pokud ''A'' a ''B'' jsou regulární výrazy, je ''A'' + ''B'' regulární výraz, popisující buď text popsaný výrazem ''A'', nebo text, popsaný výrazem ''B''.&lt;br /&gt;
# Pokud ''A'' je regulární výraz, pak ''A''* je regulární výraz, popisující libovolný počet opakování (včetně žádného opakování) textů popsaných výrazem ''A''.&lt;br /&gt;
# Pokud ''A'' je regulární výraz, je (''A'') regulární výraz popisující stejný jazyk. (Závorky slouží pouze pro vyjasnění priorit.)&lt;br /&gt;
Tato definice dostačuje pro popis libovolného regulárního jazyka.&lt;br /&gt;
== Prakticky používané syntaxe ==&lt;br /&gt;
V praxi se používají obvykle rozšířené definice regulárních jazyků, které umožňují běžné konstrukce zapsat jednodušším způsobem (ale schopnosti takto rozšířených výrazů se od základní definice neliší). V běžných syntaxích se zpravidla objevují následující konstrukce:&lt;br /&gt;
* Místo znaku + (plus) se pro alternativy obvykle používá &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; (svislítko neboli pajpa).&lt;br /&gt;
* Kulaté závorky mají funkci substituce za dílčí regulární výraz (například regulární výraz &amp;lt;code&amp;gt;(a1|a2)(b1|b2)&amp;lt;/code&amp;gt; zachycuje případy a1 nebo a2 následované b1 nebo b2)&lt;br /&gt;
* Jeden z uvedených znaků: zápis &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[a-z0-9]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; znamená ''libovolný znak v rozsahu a–z, 0–9''.&lt;br /&gt;
* Jeden z neuvedených znaků: zápis &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[^a-z0-9]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; znamená ''libovolný znak ''kromě'' znaků v rozsahu a–z, 0–9''. Jindy se místo stříšky používá znak &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; (vykřičník).&lt;br /&gt;
* Libovolný znak: symbol &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; (tečka) znamená ''libovolný znak''. Pozn.: podle konkrétního nastavení se nemusí vztahovat na nový řádek.&lt;br /&gt;
* Pouze na začátku řetězce: zápis &amp;lt;code&amp;gt;^nějakývýraz&amp;lt;/code&amp;gt; popisuje pouze takové řetězce ''nějakývýraz'', které se nachází na začátku řetězce.&lt;br /&gt;
* Pouze na konci řetězce: zápis &amp;lt;code&amp;gt;nějakývýraz$&amp;lt;/code&amp;gt; popisuje pouze takové řetězce ''nějakývýraz'', které se nachází na konci řetězce.&lt;br /&gt;
* Nepovinná část: zápis &amp;lt;code&amp;gt;xy?&amp;lt;/code&amp;gt; popisuje znak ''x'', který může, ale nemusí, být následován znakem ''y''. Sémanticky odpovídá „0 nebo 1 výskyt“.&lt;br /&gt;
* Libovolný počet opakování: &amp;lt;code&amp;gt;x*&amp;lt;/code&amp;gt; (0 až ∞ výskytů ''x'')&lt;br /&gt;
* Libovolný počet opakování, ale nejméně jednou: &amp;lt;code&amp;gt;x+&amp;lt;/code&amp;gt; vyžaduje alespoň jeden výskyt znaku ''x''.&lt;br /&gt;
* Zadaný počet opakování: zápis &amp;lt;code&amp;gt;x{3,5}&amp;lt;/code&amp;gt; popisuje troj- až pěti-násobné opakování znaku ''x''.&lt;br /&gt;
* Je-li potřeba zadat znak, který má zde speciální význam, dá se tento znak [[escapování|escapovat]] zpětným lomítkem – &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Definované množiny znaků: některé speciální skupiny znaků mají zkratkový zápis, např. &amp;lt;code&amp;gt;\d&amp;lt;/code&amp;gt; pro libovolnou desítkovou číslici, &amp;lt;code&amp;gt;\s&amp;lt;/code&amp;gt; pro [[bílý znak]] apod.&lt;br /&gt;
* Různá rozšíření (nemusejí být standardní), například &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[:&amp;lt;:]]Wikipedie[[:&amp;gt;:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (pro [[MySQL]]) hledá výraz ''Wikipedie'' jako celé slovo (tj. oddělené mezerami, interpunkcí či jinými znaky, které nejsou součástí slova).&lt;br /&gt;
* Celý regulární výraz podle PCRE (viz níže) je navíc oddělen znakem (nejčastěji dopředným lomítkem), které jej též uzavírá a za kterým následují „přepínače“. Například přepínač &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; vypíná citlivost na velká/malá písmena.&lt;br /&gt;
Mezi nejznámější používané syntaxe zápisu regulárních výrazů patří ''[[POSIX]] Regular Expressions'' a ''Perl Compatible Regular Expressions'' (PCRE), odvozená z definice jazyka [[Perl]]. Syntaxe PCRE (případně s malými odlišnostmi) se používá mimo jiné v [[PHP]] (funkce &amp;lt;code&amp;gt;preg_&amp;lt;/code&amp;gt; nebo (nyní již zastaralé) funkce &amp;lt;code&amp;gt;ereg&amp;lt;/code&amp;gt;(&amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;)&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;), [[Python]]u či [[JavaScript]]u.&lt;br /&gt;
== Regulární výrazy popisující neregulární jazyky ==&lt;br /&gt;
V mnoha dnešních nástrojích obsahuje syntaxe „regulárních výrazů“ prostředky, kterými lze popsat [[formální jazyk|jazyky]] silnější než regulární. Např. prostřednictvím tzv. zpětných odkazů v PCRE lze zapsat výraz &amp;lt;code&amp;gt;(.*)\1&amp;lt;/code&amp;gt;, který označuje dvojí opakování libovolného textu (např. „masomaso“ či „123123“). Jazyk všech takových opakování však není regulární, není dokonce ani [[bezkontextový jazyk|bezkontextový]]; běžné nástroje tak umožňují zapsat [[NP-těžká úloha|NP-těžké]] jazyky (a vyhledávat podle nich).&lt;br /&gt;
To vede k jistému zmatení pojmů, neboť „regulární výraz“ v běžném použití označuje obecnější pojem než „regulární výraz“ ve smyslu teorie formálních jazyků. Pro jednoznačnost se někdy tyto „rozšířené regulární výrazy“ označují jinak, např. výhradně výrazem „regex“.&amp;lt;ref&amp;gt;Ian Graham: [http://www.aladdin.cs.cmu.edu/reu/abstracts/regexpresentation.ppt ''Kleene Would Be Shocked – Redrawing the Link Between Theory and Modern Regex Engines''] – prezentace na Carnegie Mellon University, 2. 8. 2002 ([[Microsoft PowerPoint|PPT]]; anglicky)&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[[Larry Wall]]: [http://dev.perl.org/perl6/doc/design/apo/A05.html ''Apocalypse 5: Pattern Matching''], 18. 5. 2006&amp;lt;/ref&amp;gt;&lt;br /&gt;
== Příklady ==&lt;br /&gt;
* &amp;lt;code&amp;gt;Pe(t|p)a&amp;lt;/code&amp;gt; popisuje řetězce „Peta“ a „Pepa“.&lt;br /&gt;
* &amp;lt;code&amp;gt;Ba*f&amp;lt;/code&amp;gt; popisuje řetězce „Bf“, „Baf“, „Baaf“, „Baaaf“ atd.&lt;br /&gt;
* &amp;lt;code&amp;gt;\d{3}&amp;amp;nbsp;\d{2}&amp;lt;/code&amp;gt; popisuje posloupnost tří číslic, mezeru a dvě číslice – formát [[poštovní směrovací číslo|PSČ]].&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;[^&amp;amp;gt;]*&amp;amp;gt;&amp;lt;/code&amp;gt; popisuje tag v jazyce [[HyperText Markup Language|HTML]] – libovolný text uzavřený mezi špičaté závorky (poznámka: tento výraz je zjednodušený, ve skutečném HTML situaci komplikují řetězce v uvozovkách).&lt;br /&gt;
* &amp;lt;code&amp;gt;[0-9a-fA-F]+(,&amp;amp;nbsp;?[0-9a-fA-F]+)*&amp;lt;/code&amp;gt; popisuje seznam [[Šestnáctková soustava|hexadecimálních]] čísel, oddělených čárkami a nepovinnými mezerami.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
=== Související články ===&lt;br /&gt;
* [[Regulární jazyk]]&lt;br /&gt;
&lt;br /&gt;
== Externí odkazy ==&lt;br /&gt;
* [http://www.root.cz/serialy/regularni-vyrazy/ Root.cz – Seriál ''Regulární výrazy'']&lt;br /&gt;
* [http://www.regularnivyrazy.info/ Regulární výrazy] - syntaxe, návody, řešení, tester RV, diskuze&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Článek z Wikipedie}}&lt;br /&gt;
{{Formální jazyky a gramatiky}}&lt;br /&gt;
[[Kategorie:Formální jazyky]]&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	</feed>