diff --git a/README-cn.md b/README-cn.md index 08f34cf..45b7f83 100644 --- a/README-cn.md +++ b/README-cn.md @@ -13,6 +13,7 @@ * [한국어](README-ko.md) * [Turkish](README-tr.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## 什么是正则表达式? diff --git a/README-es.md b/README-es.md index 48d54da..3f59d66 100644 --- a/README-es.md +++ b/README-es.md @@ -14,6 +14,7 @@ * [한국어](README-ko.md) * [Turkish](README-tr.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## Qué es una expresión regular? > Una expresión regular es un grupo de caracteres o símbolos, los cuales son usados para buscar un patrón específico dentro de un texto. diff --git a/README-fr.md b/README-fr.md index 6e7c65d..8216394 100644 --- a/README-fr.md +++ b/README-fr.md @@ -13,6 +13,7 @@ * [한국어](README-ko.md) * [Turkish](README-tr.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## Qu'est-ce qu'une expression régulière? diff --git a/README-gr.md b/README-gr.md index 8fb7da2..935f082 100644 --- a/README-gr.md +++ b/README-gr.md @@ -14,6 +14,7 @@ * [한국어](README-ko.md) * [Turkish](README-tr.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## Τι είναι μια Κανονική Έκφραση (Regular Expression); diff --git a/README-ja.md b/README-ja.md index 126cde8..af9d8b3 100644 --- a/README-ja.md +++ b/README-ja.md @@ -13,6 +13,7 @@ * [한국어](README-ko.md) * [Turkish](README-tr.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## 正規表現とは diff --git a/README-ko.md b/README-ko.md index 7d0097e..e3029d0 100644 --- a/README-ko.md +++ b/README-ko.md @@ -13,6 +13,7 @@ * [한국어](README-ko.md) * [Turkish](README-tr.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## 정규표현식이란 무엇인가? diff --git a/README-pl.md b/README-pl.md new file mode 100644 index 0000000..28622c4 --- /dev/null +++ b/README-pl.md @@ -0,0 +1,533 @@ +
+

+Learn Regex +


+ +## Tłumaczenia: + +* [English](README.md) +* [Español](README-es.md) +* [Français](README-fr.md) +* [Português do Brasil](README-pt_BR.md) +* [中文版](README-cn.md) +* [日本語](README-ja.md) +* [한국어](README-ko.md) +* [Turkish](README-tr.md) +* [Greek](README-gr.md) +* [Polish](README-pl.md) + +## Co to jest wyrażenie regularne? + +> Wyrażenie regularne to grupa znaków lub symboli, które służą do odnalezienia określonego wzoru w tekście. + +Wyrażenie regularne to wzorzec, który jest dopasowywany do tekstu od lewej +do prawej strony. Termin "wyrażenie regularne" (ang. "regular expression") +jest dość długie, więc zazwyczaj używa się skróconej formy "regex" lub "regexp". +Wyrażenie regularne jest używane do zastępowania tekstu w łańcuchu znaków +(ang. string), walidacji formularzy, wyodrębniania wycinka z łańcucha +(ang. substring) według podanego wzorca, i wielu innych. + +Wyobraź sobie, że piszesz aplikację i chcesz ustawić reguły dotyczące tego, +jak użytkownik wybiera swoją nazwę. Chcemy, aby nazwa użytkownika zawierała litery, +liczby, podkreślenia i myślniki. Chcemy również ograniczyć liczbę znaków w nazwie +użytkownika, aby nie wyglądała za brzydko. Stosujemy następujące wyrażenie +regularne, aby sprawdzić poprawność nazwy: + +

+

+ Wyrażenie regularne +

+ +Powyższe wyrażenie akceptuje łańcuchy `john_doe`, `jo-hn_doe` +i `john12_as`. Odrzuca `Jo` ponieważ łańcuch zawiera dużą literę +i jest za krótki. + +## Spis treści + +- [Najprostsze wyrażenie](#1-najprostsze-wyrażenie) +- [Metaznaki](#2-metaznaki) + - [Kropka](#21-kropka) + - [Zestaw znaków](#22-zestaw-znaków) + - [Odwrócony zestaw znaków](#221-odwrócony-zestaw-znaków) + - [Powtórzenia](#23-powtórzenia) + - [Gwiazdka](#231-gwiazdka) + - [Plus](#232-plus) + - [Znak zapytania](#233-znak-zapytania) + - [Klamry](#24-klamry) + - [Grupa znaków](#25-grupa-znaków) + - [Alternatywa](#26-alternatywa) + - [Znak ucieczki](#27-znak-ucieczki) + - [Kotwice](#28-kotwice) + - [Kareta](#281-kareta) + - [Dolar](#282-dolar) +- [Skróty](#3-skróty) +- [Lookaround](#4-lookaround) + - [Lookahead](#41-lookahead) + - [Odwrócony lookahead](#42-odwrócony-lookahead) + - [Lookbehind](#43-lookbehind) + - [Odwrócony lookbehind](#44-odwrócony-lookbehind) +- [Flagi](#5-flagi) + - [Wielkość znaków](#51-wielkość-znaków) + - [Przeszukiwanie globalne](#52-przeszukiwanie-globalne) + - [Multilinia](#53-multilinia) + +## 1. Najprostsze wyrażenie + +Wyrażenie regularne to ciąg znaków, których używamy do przeszukania tekstu. +Na przykład, wyrażenie `the` oznacza: literę `t`, następującą +po niej literę `h`, następującą po niej literę `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/dmRygT/1) + +Wyrażenie regularne `123` pasuje do łańcucha `123`. Wyrażenie regularne +jest dopasowywane do danego łańcucha poprzez porównanie każdego znaku, +jeden po drugim, w wyrażeniu i łańcuchu. Wyrażenia są zwykle wrażliwe +na wielkość znaków, więc wyrażenie `The` nie pasuje do łańcucha `the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/1paXsy/1) + +## 2. Metaznaki + +Metaznaki to składowe elementy wyrażeń regularnych. Znaki te, nie oznaczają +siebie samych, są natomiast interpretowane w specjalny sposób. +Niektóre znaki mają specjalne znaczenie i są zapisywane w kwadratowych nawiasach. +Metaznaki to: + +|Metaznaki|Opis| +|:----:|----| +|.|Dowolny znak z wyjątkiem nowej linii.| +|[ ]|Zakres. Każdy znak zapisany w kwadratowym nawiasie.| +|[^ ]|Odwrócony zakres. Każdy znak, który nie znajduje się w kwadratowym nawiasie.| +|*|0 lub więcej poprzedzających znaków.| +|+|1 lub więcej poprzedzających znaków.| +|?|0 lub 1 poprzedzających znaków.| +|{n,m}|Minimum "n" ale nie więcej niż "m" poprzedzających znaków.| +|(xyz)|Grupowanie znaków. Znaki xyz dokładnie w tej kolejności.| +|||Alternatywa. Znaki przed symbolem lub za symbolem.| +|\|Znak ucieczki. Umożliwia używanie zarezerwowanych znaków [ ] ( ) { } . * + ? ^ $ \ |.| +|^|Oznacza początek wzorca.| +|$|Oznacza koniec wzorca.| + +## 2.1 Kropka + +Kropka `.` jest najprostszym przykładem metaznaku. Oznacza dowolny znak z wyłączeniem entera +i znaków nowej linii. Na przykład, wyrażenie regularne `.ar` oznacza: dowolny znak, następującą +po niej literę `a`, następującą po niej literę `r`. + +
+".ar" => The car parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/xc9GkU/1) + +## 2.2 Zestaw znaków + +Zestawy znaków nazywane też klasami znaków. Nawiasy kwadratowe służą do określenia zestawów znaków. +Użycie myślnika wewnątrz zestawu, określa jego zakres. Kolejność znaków w nawiasach kwadratowych +nie ma znaczenia. Na przykład wyrażenie `[Tt]he` oznacza: dużą literę `T` lub małą `t`, +następującą po niej literę `h`, następującą po niej literę `e`. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/2ITLQ4/1) + +Jednak kropka w zestawie znaków, oznacza dosłownie kropkę. Wyrażenie regularne +`ar[.]` oznacza: małą literę `a`, następującą po niej literę `r`, +następującą po niej `.` kropkę. + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Odwrócony zestaw znaków + +Generalnie znak karety oznacza początek wyrażenia, ale gdy zostanie użyty zaraz +za otwierającym nawiasem kwadratowym, odwraca zestaw znaków. Na przykład +wyrażenie `[^c]ar` oznacza: każdy znak z wyjątkiem `c`, +następującą po niej literę `a`, następującą po niej literę `r`. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/nNNlq3/1) + +## 2.3 Powtórzenia + +Następujące metaznaki `+`, `*` czy `?` określają ile razy wzorzec może się powtórzyć. +Te metaznaki zachowują się różnie, w zależności od sytuacji. + +### 2.3.1 Gwiazdka + +Symbol `*` oznacza zero lub więcej powtórzeń poprzedzających znaków. Wyrażenie +regularne `a*` oznacza: zero lub więcej powtórzeń poprzedzającej małej +litery `a`. Ale jeśli występuje po zestawie znaków lub klasie, to oznacza +powtórzenia całego zestawu lub klasy. Na przykład, wyrażenie regularne +`[a-z]*` oznacza: każdy ciąg znaków pisany małymi literami. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/7m8me5/1) + +Symbol `*` może być użyty z metaznakiem `.` by oznaczyć każdy łańcuch +znaków `.*`. Symbol `*` może być użyty ze znakiem `\s` +by znaleźć łańcuch zawierający spacje. Na przykład, wyrażenie +`\s*cat\s*` oznacza: zero lub więcej spacji, następującą po niej małą literę `c`, +następującą po niej małą literę `a`, następującą po niej małą literę `t`, +następujące po niej zero lub więcej spacji. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 Plus + +Symbol `+` oznacza jeden lub więcej powtórzeń poprzedzających znaków. Na przykład, +wyrażenie `c.+t` oznacza: małą literę `c`, następujący po niej przynajmniej jeden +dowolny znak, następującą po nim małą literę `t`. W tym wypadku `t` jest ostatnim +`t` w zdaniu. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 Znak zapytania + +W wyrażeniach regularnych znak `?` sprawia, że poprzedzający znak jest opcjonalny. +Ten symbol oznacza zero lub jedno wystąpienie poprzedzającego znaku. Na przykład, +wyrażenie regularne `[T]?he` oznacza: opcjonalną dużą literę `T`, następującą +po niej małą literę `h`, następującą po niej małą literę `e`. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/kPpO2x/1) + +## 2.4 Klamry + +W wyrażeniach regularnych, klamry zwane również kwantyfikatorami, używane są +do określenia, ile razy znak lub grupa znaków może się powtórzyć. +Na przykład wyrażenie regularne `[0-9]{2,3}` oznacza: przynajmniej +2 znaki, ale nie więcej niż 3 (znaki z zakresu od 0 do 9). + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/juM86s/1) + +Możemy opuścić drugą liczbę. Na przykład regularne wyrażenie `[0-9]{2,}` +oznacza: 2 lub więcej znaków. Jeżeli dodatkowo usuniemy przecinek, +to wyrażenie `[0-9]{3}` oznacza: dokładnie 3 znaki z zakresu 0 do 9. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/Sivu30/1) + +## 2.5 Grupa znaków + +Grupa znaków to grupa podwzorców, które zapisywane są w nawiasach `(...)`. +Jak wspominaliśmy wyżej, jeśli w wyrażeniu regularnym wstawimy kwantyfikator po +znaku, wtedy powtórzy on ten znak. Ale gdy wstawimy kwantyfikator po grupie znaków, +wtedy cała grupa zostanie powtórzona. Na przykład wyrażenie regularne `(ab)*` +oznacza zero lub więcej powtórzeń grupy "ab". Możemy także użyć metaznaku +alternatywy `|` wewnątrz grupy. Na przykład wyrażenie `(c|g|p)ar` oznacza: małą literę `c`, +`g` lub `p`, następującą po niej literę `a`, następującą po niej literę `r`. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/tUxrBG/1) + +## 2.6 Alternatywa + +W wyrażeniach regularnych pionowa kreska `|` oznacza alternatywę. +Działa jak warunek pomiędzy różnymi wyrażeniami. Teraz możesz pomyśleć, że +to działa tak samo jak zestaw znaków. Różnica polega na tym, że zestaw znaków +działa na poziomie znaków, natomiast alternatywa na poziomie wyrażenia. Na przykład +wyrażenie regularne `(T|t)he|car` oznacza: dużą literę `T` lub małą `t`, +następującą po niej literę `h`, następującą po niej literę `e` lub `c`, następującą +po niej literę `a`, następującą po niej literę `r`. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/fBXyX0/1) + +## 2.7 Znak ucieczki + +Ukośnik `\` w wyrażeniach regularnych jest znakiem ucieczki. Pozwala on +używać w wyrażeniu zarezerwowanych znaków takich jak `{ } [ ] / \ + * . $ ^ | ?`. +Aby użyć znaku specjalnego w wyrażeniu, postaw `\` przed nim. + +Na przykład wyrażenie `.` dopasowuje każdy znak z wyjątkiem nowej linii. +Żeby dopasować kropkę `.` w wyrażeniu regularnym, trzeba wstawić przed nią ukośnik. +Wyrażenie `(f|c|m)at\.?` oznacza: małe litery `f` lub `c` lub `m`, następującą po niej +literę `a`, następującą po niej literę `t`, następującą kropkę `.`, która jest opcjonalna. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/DOc5Nu/1) + +## 2.8 Kotwice + +W wyrażeniach regularnych używamy kotwic aby sprawdzić czy dopasowywany symbol +jest pierwszym lub ostatnim symbolem w łańcuchu. Są dwa typy: pierwszy to +kareta `^`, która sprawdza czy znak jest początkiem łańcucha, drugi to dolar `$`, +który sprawdza czy znak jest ostatnim elementem łańcucha. + +### 2.8.1 Kareta + +Kareta `^` sprawdza czy znak jest początkiem łańcucha. Jeżeli użyjemy takiego +wyrażenia `^a` (jeśli a jest pierwszym znakiem) na łańcuchu `abc` to dopasuje +nam `a`. Ale jeśli użyjemy takiego wyrażenia `^b` na tym samym łańcuchu, to nie +zwróci nam nic. Ponieważ w łańcuchu `abc` "b" nie jest pierwszym symbolem. +Spójrzmy teraz na wyrażenie `^(T|t)he` które oznacza: dużą literę `T` lub małą +`t`, która jest początkiem łańcucha, następującą po niej literę `h`, następującą +po niej literę `e`. + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Dolar + +Symbol dolara `$` używany jest do sprawdzenia czy dopasowywany znak jest ostatni +w łańcuchu. Na przykład, wyrażenie regularne `(at\.)$` oznacza: małą literę `a`, +następującą po niej literę `t`, następującą po niej kropkę `.` i na dodatek +dopasowanie musi być końcem łańcucha. + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/t0AkOd/1) + +## 3. Skróty + +W wyrażeniach regularnych znajdziemy także skróty dla popularnych zestawów znaków, +które ułatwiają pracę z wyrażeniami regularnymi. Skróty wyglądają następująco: + +|Skrót|Opis| +|:----:|----| +|.|Każdy znak z wyjątkiem nowej linii| +|\w|Znaki alfanumeryczne: `[a-zA-Z0-9_]`| +|\W|Znaki nie alfanumeryczne: `[^\w]`| +|\d|Cyfry: `[0-9]`| +|\D|Nie cyfry: `[^\d]`| +|\s|Dowolny biały znak: `[\t\n\f\r\p{Z}]`| +|\S|Każdy znak oprócz białych: `[^\s]`| + +## 4. Lookaround + +Lookbehind i lookahead (nazywane również lookaround) to specyficzne typy +***niezwracających grup*** (dopasowują wzorzec, ale nie zwracają wartości). +Lookaround używane są w sytuacji, gdy mamy wzorzec i jest on poprzedzony innym wzorcem, +lub następuje po nim kolejny wzorzec. Na przykład, chcemy mieć wszystkie +numery, które są poprzedzone znakiem `$` w takim łańcuchu `$4.44 and $10.88`. +Użyjemy takiego wyrażenia regularnego `(?<=\$)[0-9\.]*` które oznacza: znajdź +wszystkie liczby ze znakiem `.` poprzedzone znakiem `$`. W wyrażeniach regularnych +wyróżniamy: + +|Symbol|Opis| +|:----:|----| +|?=|Lookahead| +|?!|Odwrócony lookahead| +|?<=|Lookbehind| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. + + +[Przetestuj wyrażenie](https://regex101.com/r/IDDARt/1) + +### 4.2 Odwrócony lookahead + +Używany jest, gdy potrzebujemy dopasowania z łańcucha, po których nie następują +żadne wzorce. Odwrócony lookahead definiujemy w nawiasach, stosując znak negacji +`!` po znaku zapytania, na przykład: `(?!...)`. Popatrzmy na następujące wyrażenie +`(T|t)he(?!\sfat)` które oznacza: znajdź wszystkie słowa `The` lub `the` w łańcuchu, +po których nie następuje słowo `fat`, poprzedzone spacją. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/V32Npg/1) + +### 4.3 Lookbehind + +Lookbehind używany jest do odnalezienia wszystkich dopasowań poprzedzonych konkretnym +wzorcem. Wyrażenie lookbehind zapisujemy tak: `(?<=...)`. Na przykład, wyrażenie +`(?<=(T|t)he\s)(fat|mat)` oznacza: znajdź wszystkie słowa `fat` lub `mat` w łańcuchu, +które znajdują się po słowach `The` lub `the`. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/avH165/1) + +### 4.4 Odwrócony lookbehind + +Odwrócony używany jest do odnalezienia wszystkich dopasowań niepoprzedzonych konkretnym +wzorcem. Odwrócony lookbehind zapisujemy tak: `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. + + +[Przetestuj wyrażenie](https://regex101.com/r/8Efx5G/1) + +## 5. Flagi + +Flagi nazywane są także modyfikatorami, ponieważ zmieniają wynik wyrażenia regularnego. +Flagi mogą być używane w każdej kombinacji i są integralną częścią wyrażeń regularnych. + +|Flaga|Opis| +|:----:|----| +|i|Wielkość znaków: Sprawia, że dopasowanie nie jest wrażliwe na wielkość znaków.| +|g|Przeszukanie globalne: Wyszukiwanie wzorca w całym łańcuchu.| +|m|Multilinia: Sprawia, że kotwice działają na każdej linii.| + +### 5.1 Wielkość znaków + +Modyfikator `i` używany jest, gdy wielkość liter nie ma znaczenia. Na przykład +wyrażenie `/The/gi` oznacza: dużą literę `T`, następującą po niej literę `h`, +następującą po niej literę `e`. A na końcu wyrażenia, flaga `i` żeby ignorować +wielkość znaków. Jak widać, została też użyta flaga `g` ponieważ chcemy przeszukać +cały łańcuch. + +
+"The" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/ahfiuh/1) + +### 5.2 Przeszukiwanie globalne + +Modyfikator `g` używany jest do przeszukiwania całego łańcucha (znajdź wszystko, +a nie tylko zatrzymuj się na pierwszym). Na przykład wyrażenie `/.(at)/g` +oznacza: każdy znak z wyjątkiem nowej linii, następującą po nim literę `a`, +następującą po niej literę `t`. Ponieważ użyliśmy na końcu wyrażenia flagi `g`, +wyszukane zostaną wszystkie dopasowania w łańcuchu, a nie tylko pierwszy (domyślne zachowanie). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/dO1nef/1) + +### 5.3 Multilinia + +Modyfikator `m` używany jest do dopasowywania w wielu liniach. Jak wspominaliśmy +wcześniej, kotwice `(^, $)` używane są do sprawdzania czy wzorzec jest początkiem +lub końcem łańcucha. Jeśli chcemy, żeby kotwice zadziałały w każdej linii, używamy +wtedy flagi `m`. Na przykład wyrażenie `/at(.)?$/gm` oznacza: małą literę `a`, +następującą po niej małą literę `t`, opcjonalnie dowolny znak z wyjątkiem nowej linii. +I ponieważ użyliśmy flagi `m` dopasowywane będą wzorce na końcu każdej linii w łańcuchu. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Przetestuj wyrażenie](https://regex101.com/r/E88WE2/1) + +## Kontrybucja + +* Zgłaszanie błędów +* Otwieranie pull request z poprawkami +* Dzielenie się poradnikiem +* Skontaktuj się ze mną ziishaned@gmail.com lub [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## Licencja + +MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com) diff --git a/README-pt_BR.md b/README-pt_BR.md index de90728..791c48c 100644 --- a/README-pt_BR.md +++ b/README-pt_BR.md @@ -13,6 +13,7 @@ * [日本語](README-ja.md) * [한국어](README-ko.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## O que é uma Expressão Regular? diff --git a/README-tr.md b/README-tr.md index 956e85e..718849b 100644 --- a/README-tr.md +++ b/README-tr.md @@ -13,6 +13,7 @@ * [한국어](README-ko.md) * [Turkish](README-tr.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## Düzenli İfade Nedir? diff --git a/README.md b/README.md index 443973e..29f1d4c 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ * [한국어](README-ko.md) * [Turkish](README-tr.md) * [Greek](README-gr.md) +* [Polish](README-pl.md) ## What is Regular Expression? diff --git a/img/regexp-pl.png b/img/regexp-pl.png new file mode 100644 index 0000000..5da2cd4 Binary files /dev/null and b/img/regexp-pl.png differ