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 @@
+
+
+
+
+
+
+"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 [](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