<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=%2FWyra%C5%BCeniaRegularne</id>
	<title>/WyrażeniaRegularne - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=%2FWyra%C5%BCeniaRegularne"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=/Wyra%C5%BCeniaRegularne&amp;action=history"/>
	<updated>2026-04-24T03:23:09Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=/Wyra%C5%BCeniaRegularne&amp;diff=2017&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot;= TI:WTBD/WyrażeniaRegularne =  Wyrażenia regularne (RE, RegEx, RegExp) to składnia budowy wzorców, definiujących klasy ''pasujących'' napisów. Implementacja...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=/Wyra%C5%BCeniaRegularne&amp;diff=2017&amp;oldid=prev"/>
		<updated>2015-05-23T14:39:33Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;= &lt;a href=&quot;/edu/index.php/TI:WTBD&quot; title=&quot;TI:WTBD&quot;&gt;TI:WTBD&lt;/a&gt;/WyrażeniaRegularne =  Wyrażenia regularne (RE, RegEx, RegExp) to składnia budowy wzorców, definiujących klasy &amp;#039;&amp;#039;pasujących&amp;#039;&amp;#039; napisów. Implementacja...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= [[TI:WTBD]]/WyrażeniaRegularne =&lt;br /&gt;
&lt;br /&gt;
Wyrażenia regularne (RE, RegEx, RegExp) to składnia budowy wzorców, definiujących klasy ''pasujących'' napisów. Implementacja polega na bibliotece funkcji/klas, które interpretują te wzorce i stosują je do określania operacji, jakie mają być wykonane na napisach.&lt;br /&gt;
&lt;br /&gt;
Wyrażenia regularne pozwalają często uniknąć żmudnego analizowania napisów znak po znaku, ale nie są uniwersalnym narzędziem do analizy formatów tekstowych -- tylko raczej szczeblem pośrednim pomiędzy analizą danych tekstowych kodem ''ad hoc'', a wykorzystaniem wyspecjalizowanych parserów. W szczególności, nie wystarczają one do analizy złożonych formatów czy języków (języki programowania, XML, ...).&lt;br /&gt;
&lt;br /&gt;
Istnieje kilka nieco różniących się implementacji wyrażeń regularnych:&lt;br /&gt;
* POSIX / GNU (''grep'', ''sed'', ''awk'')&lt;br /&gt;
* Perl (PCRE)&lt;br /&gt;
* Python&lt;br /&gt;
* Javascript&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Podstawowa składnia (''rozszerzona'', w terminach POSIX) ==&lt;br /&gt;
&lt;br /&gt;
* są znaki zwykłe, i metaznaki&lt;br /&gt;
* metaznaki to:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
. ^ $ * + ? { } [ ] \ | ( )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* znaki zwykłe to cała reszta&lt;br /&gt;
* znaki zwykłe oznaczają same siebie, metaznaki -- operatory, grupowania, elementy wymienne&lt;br /&gt;
* &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt; stosuje się do wyłączenia interpretacji następującego po nim metaznaku&lt;br /&gt;
* pojedynczy znak jest regexpem&lt;br /&gt;
* elementy wymienne to też regexpy:&lt;br /&gt;
** &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; -- dowolny pojedynczy znak&lt;br /&gt;
** &amp;lt;code&amp;gt;[rjb]&amp;lt;/code&amp;gt; -- zestaw: dowolny 1 z wymienionych&lt;br /&gt;
** &amp;lt;code&amp;gt;[a-k]&amp;lt;/code&amp;gt; -- zakres&lt;br /&gt;
** &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[:alpha:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; -- klasa nazwana, np. tu: dowolna z liter (jest ich kilka)&lt;br /&gt;
** &amp;lt;code&amp;gt;[^...]&amp;lt;/code&amp;gt; -- dopełnienie zestawu, zakresu, klasy&lt;br /&gt;
* operatory to:&lt;br /&gt;
** sklejanie (gdy piszemy jeden regexp za drugim)&lt;br /&gt;
** zwielokrotnianie -- operatory postfixowe:&lt;br /&gt;
*** &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; -- dowolna wielokrotność (w tym -zero)&lt;br /&gt;
*** &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; -- krotność co najmniej 1&lt;br /&gt;
*** &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; -- krotność 0 lub 1&lt;br /&gt;
*** &amp;lt;code&amp;gt; {n,m} &amp;lt;/code&amp;gt; -- krotność od &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; do &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; włącznie; każdą z tych liczb można pominąć nie określając dolnego czy odp. górnego ograniczenia&lt;br /&gt;
*** &amp;lt;code&amp;gt; {n} &amp;lt;/code&amp;gt; -- krotność dokładnie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;&lt;br /&gt;
** alternatywa: do &amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt; pasuje suma tego co pasuje do &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; i tego co do &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;.&lt;br /&gt;
* kolejność operacji to: zwielokrotnianie, sklejanie, alternatywa&lt;br /&gt;
* do grupowania -- narzucenia łączności operacji można użyć nawiasów okrągłych&lt;br /&gt;
* nawiasy okrągłe definiują również ''referencje wsteczne'':&lt;br /&gt;
** &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; oznacza kolejne wystąpienie w odp. miejscu podnapisu, który pasował do &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;-tej grupy w nawiasach (w składni Posix &amp;lt;code&amp;gt;n &amp;lt; 10&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;^ $&amp;lt;/code&amp;gt; oznaczają odpowiednio początek i koniec napisu (linii w przypadku ''grep'').&lt;br /&gt;
&lt;br /&gt;
Taka składnia obowiązuje w ''egrep'' (''grep -E'') i ''awk''. Zwykły ''grep'' nie rozpoznaje&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;? + { | ( )&amp;lt;/source&amp;gt; jako metaznaków, tylko odwrotnie -- interpretuje je, jeśli ''są'' poprzedzone znakiem &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt; (zaszłość historyczna).&lt;br /&gt;
&lt;br /&gt;
[[TI:WTBD/PrzykładyRegExp|Przykłady wyrażeń regularnych]]&lt;br /&gt;
&lt;br /&gt;
== ''grep'' ==&lt;br /&gt;
&lt;br /&gt;
* Domyślnie: przetwarza strumień tekstowy jako ciąg linijek&lt;br /&gt;
* Dla każdej linijki ustala czy zawiera ona podnapis pasujący do zadanego argumentem wyr. regularnego&lt;br /&gt;
* jeśli tak: wypisuje linijkę, jeśli nie: pomija&lt;br /&gt;
* często używane opcje:&lt;br /&gt;
** &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; -- włącza składnię ,,rozszerzoną&amp;quot;, p. uwaga powyżej&lt;br /&gt;
** &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; -- dopełnienie: przepuszcza linie ''nie'' pasujące&lt;br /&gt;
** &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt; -- utożsamia małe i wielkie litery&lt;br /&gt;
** &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; -- działa rekursywnie: jeśli któryś z argumentów jest katalogiem, to przegląda również jego zawartość&lt;br /&gt;
** &amp;lt;code&amp;gt;-e&amp;lt;/code&amp;gt; -- argument tej opcji jest wzorcem (a nie np. kolejną opcją)&lt;br /&gt;
** &amp;lt;code&amp;gt;-x&amp;lt;/code&amp;gt; -- żada dokładnego dopasowania całości linii&lt;br /&gt;
** &amp;lt;code&amp;gt;-q&amp;lt;/code&amp;gt; -- nic nie pisać, tylko ustawić kod powrotu: 0 - znaleziono dopasowanie, !=0 - nie znaleziono&lt;br /&gt;
** &amp;lt;code&amp;gt;-h&amp;lt;/code&amp;gt; -- pominąć nazwy plików w outpucie&lt;br /&gt;
&lt;br /&gt;
* [http://docs.python.org/release/2.7/library/re.html#module-re Wyrażenia regularne w Pythonie] - moduł re&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>