diff --git a/README-cn.md b/README-cn.md index a59cb5d..5cf9a2d 100644 --- a/README-cn.md +++ b/README-cn.md @@ -14,6 +14,7 @@ * [Turkish](README-tr.md) * [Greek](README-gr.md) * [Magyar](README-hu.md) +* [Polish](README-pl.md) ## 什么是正则表达式? @@ -454,7 +455,7 @@ 像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 `m`. -例如, 表达式 `/at(.)?$/gm` 表示在待检测字符串每行的末尾搜索 `at`后跟一个或多个 `.` 的字符串, 并返回全部结果. +例如, 表达式 `/at(.)?$/gm` 表示小写字符 `a` 后跟小写字符 `t` , 末尾可选除换行符外任意字符. 根据 `m` 修饰符, 现在表达式匹配每行的结尾.
"/.at(.)?$/" => The fat diff --git a/README-es.md b/README-es.md index 16d3ab0..19d5e5a 100644 --- a/README-es.md +++ b/README-es.md @@ -15,6 +15,7 @@ * [Turkish](README-tr.md) * [Greek](README-gr.md) * [Magyar](README-hu.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 c788cac..2af7fe2 100644 --- a/README-fr.md +++ b/README-fr.md @@ -14,6 +14,7 @@ * [Turkish](README-tr.md) * [Greek](README-gr.md) * [Magyar](README-hu.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 59f9112..30da6a4 100644 --- a/README-gr.md +++ b/README-gr.md @@ -15,6 +15,7 @@ * [Turkish](README-tr.md) * [Greek](README-gr.md) * [Magyar](README-hu.md) +* [Polish](README-pl.md) ## Τι είναι μια Κανονική Έκφραση (Regular Expression); diff --git a/README-ja.md b/README-ja.md index bdcaaa0..bdfec3a 100644 --- a/README-ja.md +++ b/README-ja.md @@ -14,6 +14,7 @@ * [Turkish](README-tr.md) * [Greek](README-gr.md) * [Magyar](README-hu.md) +* [Polish](README-pl.md) ## 正規表現とは diff --git a/README-ko.md b/README-ko.md index 795299a..a740acf 100644 --- a/README-ko.md +++ b/README-ko.md @@ -14,6 +14,7 @@ * [Turkish](README-tr.md) * [Greek](README-gr.md) * [Magyar](README-hu.md) +* [Polish](README-pl.md) ## 정규표현식이란 무엇인가? @@ -59,6 +60,7 @@ - [대소문자 구분없음](#51-대소문자-구분없음) - [전체 검색](#52-전체-검색) - [멀티 라인](#53-멀티-라인) + - [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른 매칭) ## 1. 기본 매쳐 @@ -401,6 +403,22 @@ [Test the regular expression](https://regex101.com/r/E88WE2/1) +## 6. 탐욕적 vs 게으른 매칭 +기본적으로 정규 표현식은 탐욕적(greedy) 매칭을 수행하는데, 이는 가능한 한 길게 매칭하는 것을 의미한다. +우리는 `?`를 사용하여 게으른(lazy) 방법 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다. + ++ +[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ą. + ++"/(.*at)/" => The fat cat sat on the mat. ++ +[Test the regular expression](https://regex101.com/r/AyAdgJ/1) + ++"/(.*?at)/" => The fat cat sat on the mat. ++ +[Test the regular expression](https://regex101.com/r/AyAdgJ/2) + ## 기여 방법 * 이슈 리포팅 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 @@ +
++
+
+ +## 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: + +
++
+ +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. +
+"(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 aca692d..e1f6df7 100644 --- a/README-pt_BR.md +++ b/README-pt_BR.md @@ -14,6 +14,7 @@ * [한국어](README-ko.md) * [Greek](README-gr.md) * [Magyar](README-hu.md) +* [Polish](README-pl.md) ## O que é uma Expressão Regular? diff --git a/README-tr.md b/README-tr.md index 9d32f1b..1dfbf7c 100644 --- a/README-tr.md +++ b/README-tr.md @@ -14,6 +14,7 @@ * [Turkish](README-tr.md) * [Greek](README-gr.md) * [Magyar](README-hu.md) +* [Polish](README-pl.md) ## Düzenli İfade Nedir? diff --git a/README.md b/README.md index 74693e7..ffd6e9c 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ * [Turkish](README-tr.md) * [Greek](README-gr.md) * [Magyar](README-hu.md) +* [Polish](README-pl.md) ## What is Regular Expression? @@ -69,6 +70,7 @@ letter and also it is too short. - [Case Insensitive](#51-case-insensitive) - [Global search](#52-global-search) - [Multiline](#53-multiline) +- [Greedy vs lazy matching](#6-greedy-vs-lazy-matching) ## 1. Basic Matchers @@ -194,7 +196,7 @@ followed by lowercase character `a`, followed by lowercase character `t`, followed by zero or more spaces.
-"\s*cat\s*" => The fat cat sat on the concatenation. +"\s*cat\s*" => The fat cat sat on the concatenation.[Test the regular expression](https://regex101.com/r/gGrwuz/1) @@ -540,6 +542,23 @@ at the end of each line in a string. [Test the regular expression](https://regex101.com/r/E88WE2/1) +## 6. Greedy vs lazy matching +By default regex will do greedy matching , means it will match as long as +possible. we can use `?` to match in lazy way means as short as possible + +
+"/(.*at)/" => The fat cat sat on the mat.+ + +[Test the regular expression](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat.+ + +[Test the regular expression](https://regex101.com/r/AyAdgJ/2) + + ## Contribution * Report issues 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