Ściągnij PDF
Wyrażenie regularne to grupa znaków lub symboli, która jest używana do znalezienia określonego wzoru z jakiegoś tekstu; można je nazwać symbolami wieloznacznymi na sterydach, jeśli chcesz. Jako programista, opanowanie wyrażeń regularnych może być potężnym narzędziem do posiadania w swoim pasie narzędziowym; na pewno będziesz musiał użyć ich w swoich programach w pewnym momencie, wyszukiwanie i zastępowanie przy użyciu wyrażeń regularnych w IDE jest naprawdę przydatne czasami, a ja uważam, że używam ich w linii poleceń każdego dnia.
Różne aplikacje i języki programowania mogą mieć różne implementacje wyrażeń regularnych, ale podstawowe koncepcje są w większości takie same. W tym poście zamierzam wyjaśnić wszystko, co musisz wiedzieć o wyrażeniach regularnych.
Wyrażenie regularne jest wzorcem, który jest dopasowywany do łańcucha tematycznego od lewej do prawej. Słowo „wyrażenie regularne” jest bardzo skomplikowane, zwykle można znaleźć skrót tego terminu jako „regex” lub „regexp”. Wyrażenie regularne jest używane do zastępowania tekstu w łańcuchu, sprawdzania poprawności formularzy, wyodrębniania podłańcucha z łańcucha na podstawie dopasowania wzorca i wielu innych rzeczy.
Wyobraź sobie, że piszesz aplikację i chcesz ustawić zasady, kiedy użytkownik wybiera swoją nazwę użytkownika. Chcemy zezwolić, aby nazwa użytkownika zawierała litery, cyfry, podkreślenia i myślniki. Chcemy także ograniczyć liczbę znaków w nazwie użytkownika, aby nie wyglądała ona brzydko. Używamy następującego wyrażenia regularnego do sprawdzenia poprawności nazwy użytkownika:
Powyższe wyrażenie regularne akceptuje ciągi john_doe
, jo-hn_doe
i john12_as
. Nie pasuje do Jo
, ponieważ ten ciąg zawiera duże litery i jest zbyt krótki.
- Table of Contents
- Basic Matchers
- Znaki meta
- 2.1 Pełen stop
- 2.2 Zestaw znaków
- 2.2.1 Zanegowany zestaw znaków
- 2.3 Powtórzenia
- 2.3.1 Gwiazda
- 2.3.2 Plus
- 2.3.3 Znak zapytania
- 2.4 Nawiasy
- 2.5 Grupa znaków
- 2.6 Alternacja
- 2.7 Ucieczka od znaku specjalnego
- 2.8 Kotwice
- 2.8.1 Caret
- 2.8.2 Dolar
- Skrócone zestawy znaków
- Obejście wzroku
- 4.1 Positive Lookahead
- 4.2 Negatywny nagłówek
- 4.3 Positive Lookbehind
- 4.4 Negative Lookbehind
- Flagi
- 5.1 Nierozróżnianie wielkości liter
- 5.2 Wyszukiwanie globalne
- 5.3 Wieloliniowe
- Pasowanie zachłanne vs leniwe
Table of Contents
- Basic Matchers
- Meta character
- Full stop
- Zestaw znaków
- Zestaw znaków negowanych
- Repetitions
- The Gwiazda
- Plus
- Znak zapytania
- Znaki
- Grupa znaków
- Alternacja
- Znak specjalny ucieczki
- Kotwice
- Karetka
- Dollar
- Skrócone zestawy znaków
- Wyszukiwanie
- Pozytywny Lookahead
- Negatywny Lookahead
- Pozytywny Lookbehind
- Flagi
- Wrażliwość na wielkość liter
- Global search
- Multiline
- Greedy vs lazy matching
Basic Matchers
Wyrażenie regularne jest po prostu wzorcem znaków, których używamy do wykonywania
wyszukiwania w tekście. Na przykład, wyrażenie regularne the
oznacza: literat
, po której następuje litera h
, po której następuje litera e
.
the => The fat cat sat on the mat.
Sprawdź wyrażenie regularne
Wyrażenie regularne 123
pasuje do łańcucha 123
. Wyrażenie regularne jest dopasowywane do łańcucha wejściowego przez porównywanie każdego znaku w wyrażeniu regularnym z każdym znakiem w łańcuchu wejściowym, jeden po drugim. W wyrażeniach regularnych
rozróżniana jest wielkość liter, więc wyrażenie regularne The
nie pasowałoby
do łańcucha the
.
The => The fat cat sat on the mat.
Testuj wyrażenie regularne
Znaki meta
Znaki meta są elementami konstrukcyjnymi wyrażeń regularnych. Metaznaki
nie występują same w sobie, ale zamiast tego są interpretowane w jakiś
specjalny sposób. Niektóre metaznaki mają specjalne znaczenie i są zapisane wewnątrz nawiasów kwadratowych. Znaki meta są następujące:
2.1 Pełen stop
Pełny stop . jest najprostszym przykładem znaku meta. Znak meta .
pasuje do każdego pojedynczego znaku. Nie pasuje do znaków powrotu lub nowej linii.
Na przykład, wyrażenie regularne .ar
oznacza: dowolny znak, po którym następuje litera a
, po której następuje litera r
.
.ar => The car parked in the garage.
Testuj wyrażenie regularne
2.2 Zestaw znaków
Zestawy znaków są również nazywane klasami znaków. Nawiasy kwadratowe są używane do
określania zestawów znaków. Użyj myślnika wewnątrz zestawu znaków, aby określić zakres znaków. Kolejność znaków w nawiasach kwadratowych
nie ma znaczenia. Na przykład, wyrażenie regularne he
oznacza: wielką literę T
lub małą literę t
, po której następuje litera h
, po której następuje litera e
.
he => The car parked in the garage.
Sprawdź wyrażenie regularne
Kropka wewnątrz zestawu znaków oznacza jednak dosłowną kropkę. Wyrażenie regularne
ar
oznacza: znak małej litery a
, po którym następuje litera r
,
po której następuje znak kropki .
.
ar => A garage is a good place to park a car.
Testuj wyrażenie regularne
2.2.1 Zanegowany zestaw znaków
Ogólnie, symbol caret reprezentuje początek łańcucha, ale gdy jest
wpisany po otwierającym nawiasie kwadratowym, neguje zestaw znaków. Na
przykład, wyrażenie regularne ar
oznacza: dowolny znak z wyjątkiem c
,
po którym następuje znak a
, a po nim litera r
.
ar => The car parked in the garage.
Testuj wyrażenie regularne
2.3 Powtórzenia
Następujące metaznaki +
, *
lub ?
są używane do określenia, ile razy może wystąpić podwzorzec. Te metaznaki zachowują się różnie w różnych
sytuacjach.
2.3.1 Gwiazda
Symbol *
dopasowuje zero lub więcej powtórzeń poprzedniego wzorca. Wyrażenie regularne a*
oznacza: zero lub więcej powtórzeń poprzedzającego znaku małymi literami a
. Ale jeżeli występuje po zestawie znaków lub klasie, to znajduje powtórzenia całego zestawu znaków. Na przykład, wyrażenie regularne *
oznacza: dowolna liczba małych liter w rzędzie.
* => The car parked in the garage #21.
Sprawdź wyrażenie regularne
Symbolu *
można użyć ze znakiem meta . w celu dopasowania dowolnego ciągu
znaków .*
. Symbolu *
można użyć ze znakiem białej spacji \s
, aby dopasować ciąg znaków białej spacji. Na przykład, wyrażenie\s*cat\s*
oznacza: zero lub więcej spacji, po których następuje znak małej litery c
,
po którym następuje znak małej litery a
, po którym następuje znak małej litery t
, po którym następuje zero lub więcej spacji.
\s*cat\s* => The fat cat sat on the concatenation.
Testuj wyrażenie regularne
2.3.2 Plus
Symbol +
dopasowuje jedno lub więcej powtórzeń poprzedzającego znaku. Na przykład, wyrażenie regularne c.+t
oznacza: mała litera c
, po której następuje co najmniej jeden znak, po którym następuje mała litera t
. Należy wyjaśnić, że t
jest ostatnim t
w zdaniu.
c.+t => The fat cat sat on the mat.
Testuj wyrażenie regularne
2.3.3 Znak zapytania
W wyrażeniu regularnym metaznak ?
sprawia, że poprzedzający go znak
jest opcjonalny. Ten symbol dopasowuje zero lub jedną instancję poprzedzającego znaku. Na przykład, wyrażenie regularne ?he
oznacza: Opcjonalnie wielka litera T
, po której następuje mała litera h
, po której następuje mała litera e
.
he => The car is parked in the garage.
Sprawdź wyrażenie regularne
?he => The car is parked in the garage.
Sprawdź wyrażenie regularne
2.4 Nawiasy
W wyrażeniu regularnym nawiasy klamrowe, które są również nazywane kwantyfikatorami, są używane do
określenia liczby powtórzeń znaku lub grupy znaków, które mogą być
powtórzone. Na przykład, wyrażenie regularne {2,3}
oznacza: Match at least 2 digits but not more than 3 ( characters in the range of 0 to 9).
{2,3} => The number was 9.9997 but we rounded it off to 10.0.
Testuj wyrażenie regularne
Możemy pominąć drugą cyfrę. Na przykład, wyrażenie regularne{2,}
oznacza: Dopasuj 2 lub więcej cyfr. Jeśli usuniemy również przecinek to
wyrażenie regularne {3}
oznacza: Dopasuj dokładnie 3 cyfry.
{2,} => The number was 9.9997 but we rounded it off to 10.0.
Testuj wyrażenie regularne
{3} => The number was 9.9997 but we rounded it off to 10.0.
Testuj wyrażenie regularne
2.5 Grupa znaków
Grupa znaków to grupa podwzorców, która jest zapisana wewnątrz nawiasów (…)
. Jak już wcześniej wspomnieliśmy, w wyrażeniu regularnym, jeśli umieścimy kwantyfikator po znaku, to będzie on powtarzał poprzedni znak. Ale jeśli umieścimy kwantyfikator po grupie znaków, to powtórzy on całą grupę znaków. Na przykład, wyrażenie regularne (ab)*
dopasowuje zero lub więcej powtórzeń znaku ab
. Możemy również użyć alternacji |
meta znak wewnątrz grupy znaków. Na przykład, wyrażenie regularne (c|g|p)ar
oznacza: małą literę c
, g
lub p
, po której następuje znak a
, po którym następuje znak r
.
(c|g|p)ar => The car is parked in the garage.
Testuj wyrażenie regularne
2.6 Alternacja
W wyrażeniu regularnym pionowy pasek |
jest używany do definiowania alternacji. Alternacja jest jak warunek między wieloma wyrażeniami. Teraz, możesz myśleć, że zestaw znaków i alternacja działają w ten sam sposób. Ale duża różnica między zestawem znaków a alternacją jest taka, że zestaw znaków działa na poziomie znaków, ale alternacja działa na poziomie wyrażeń. Na przykład, wyrażenie regularne (T|t)he|car
oznacza: wielka litera T
lub mała litera t
, a następnie mała litera h
, a następnie mała litera e
lub mała litera c
, a następnie mała litera a
, a następnie mała litera r
.
(T|t)he|car => The car is parked in the garage.
Testuj wyrażenie regularne
2.7 Ucieczka od znaku specjalnego
Kreska \
jest używana w wyrażeniu regularnym do ucieczki od następnego znaku. To
pozwala nam na określenie symbolu jako pasującego znaku, włączając w to znaki zastrzeżone
{ } / \ + * . $ ^ | ?
. Aby użyć znaku specjalnego jako pasującego znaku, należy poprzedzić go znakiem \ przed nim.
Na przykład, wyrażenie regularne . jest używane do dopasowania każdego znaku z wyjątkiem
nowej linii. Teraz, aby dopasować . w łańcuchu wejściowym, wyrażenie regularne (f|c|m)at\.?
oznacza: mała litera f
, c
lub m
, po której następuje mała
znak a
, po której następuje mała litera t
, po której następuje opcjonalny znak .
.
(f|c|m)at\.? => The fat cat sat on the mat.
Testuj wyrażenie regularne
2.8 Kotwice
W wyrażeniach regularnych używamy kotwic do sprawdzania, czy pasujący symbol jest
symbolem początkowym lub końcowym łańcucha wejściowego. Kotwice są dwóch typów: Pierwszy typ to Caret ^
, który sprawdza, czy pasujący znak jest początkowym
znakiem ciągu wejściowego, a drugi typ to Dollar $
, który sprawdza, czy pasujący
znak jest ostatnim znakiem ciągu wejściowego.
2.8.1 Caret
Symbol Caret ^
jest używany do sprawdzania, czy pasujący znak jest pierwszym znakiem
łańcucha wejściowego. Jeśli zastosujemy następujące wyrażenie regularne ^a
(jeśli a jest
symbolem początkowym) do łańcucha wejściowego abc
, to pasuje ono do a
. Ale jeśli zastosujemy wyrażenie regularne ^b
na powyższym łańcuchu wejściowym, to nie pasuje ono do niczego. Ponieważ w łańcuchu wejściowym abc
b
nie jest symbolem początkowym. Spójrzmy na inne wyrażenie regularne ^(T|t)he
, które oznacza: znak T
lub t
jest symbolem początkowym łańcucha wejściowego, po którym następuje
znak h
, po którym następuje znak e
.
(T|t)he => The car is parked in the garage.
Testuj wyrażenie regularne
^(T|t)he => The car is parked in the garage.
Testuj wyrażenie regularne
2.8.2 Dolar
Symbol dolara $
jest używany do sprawdzania, czy pasujący znak jest ostatnim znakiem
łańcucha wejściowego. Na przykład, wyrażenie regularne (at\.)$
oznacza: znak małej litery a
, po którym następuje znak małej litery t
, po którym następuje znak .
, a dopasowanie musi być na końcu łańcucha.
(at\.) => The fat cat. sat. on the mat.
Testuj wyrażenie regularne
(at\.)$ => The fat cat. sat. on the mat.
Testuj wyrażenie regularne
Skrócone zestawy znaków
Wyrażenie regularne zapewnia skróty dla powszechnie używanych zestawów znaków, które oferują wygodne skróty dla powszechnie używanych wyrażeń regularnych. Skrócone zestawy znaków są następujące:
Obejście wzroku
Obejście wzroku (ang. lookaround) i nagłówek (ang. lookahead) są specyficznymi typami
grup nie przechwytujących (Używanych do dopasowania wzorca, ale nie znajdujących się na liście dopasowań). Lookaheads są używane, gdy mamy warunek, że dany wzorzec jest poprzedzony lub następuje po nim inny określony wzorzec. Na przykład, chcemy uzyskać wszystkie liczby, które są poprzedzone znakiem $
z następującego łańcucha wejściowego .44 and .88
. Użyjemy następującego wyrażenia regularnego (?<=$)*
, które oznacza: uzyskaj wszystkie liczby, które zawierają znak . i są poprzedzone znakiem $
. Poniżej przedstawiono obejścia używane w wyrażeniach regularnych:
4.1 Positive Lookahead
Pozytywny lookahead stwierdza, że pierwsza część wyrażenia musi być
poprzedzona wyrażeniem lookahead. Zwrócone dopasowanie zawiera tylko tekst, który jest dopasowany przez pierwszą część wyrażenia. Do zdefiniowania dodatniego
lookahead używane są nawiasy. Wewnątrz tych nawiasów używany jest znak zapytania ze znakiem równości, jak poniżej: (?=…)
. Wyrażenie Lookahead jest zapisywane po znaku równości wewnątrz nawiasów. Na przykład, wyrażenie regularne(T|t)he(?=\sfat)
oznacza: opcjonalnie dopasuj małą literę t
lub dużą literę T
, a następnie literę h
, a następnie literę e
. W nawiasie definiujemy pozytywny nagłówek, który mówi wyrażeniu regularnemu, aby dopasować The
lub the
, po których występuje słowo fat
.
(T|t)he(?=\sfat) => The fat cat sat on the mat.
Testuj wyrażenie regularne
4.2 Negatywny nagłówek
Negatywny nagłówek jest używany, gdy potrzebujemy uzyskać wszystkie dopasowania z łańcucha wejściowego
, po których nie występuje wzorzec. Negatywny lookahead jest zdefiniowany tak samo jak definiujemy pozytywny lookahead, ale jedyną różnicą jest to, że zamiast równego znaku =
używamy negacji !
znaku, tj. (?!…)
. Przyjrzyjmy się następującemu wyrażeniu regularnemu (T|t)he(?!\sfat)
, które oznacza: uzyskaj wszystkie The
lub the
słowa z łańcucha wejściowego, po których nie występuje słowo fat
poprzedzone znakiem spacji.
(T|t)he(?!\sfat) => The fat cat sat on the mat.
Testuj wyrażenie regularne
4.3 Positive Lookbehind
Positive lookbehind jest używany do uzyskania wszystkich dopasowań, które są poprzedzone przez
określony wzorzec. Pozytywny lookbehind jest oznaczany przez (?<=…)
. Na przykład, wyrażenie regularne (?<=(T|t)he\s)(fat|mat)
oznacza: uzyskaj wszystkie fat
lub mat
słowa z łańcucha wejściowego, które są po słowie The
lub the
.
(?<=(T|t)he\s)(fat|mat) => The fat cat sat on the mat.
Testuj wyrażenie regularne
4.4 Negative Lookbehind
Negative lookbehind jest używane do uzyskania wszystkich dopasowań, które nie są poprzedzone wzorcem
. Negatywny lookbehind jest oznaczany przez (?<!…)
. Na przykład, wyrażenie regularne (?<!(T|t)he\s)(cat)
oznacza: pobiera wszystkie cat
słowa z łańcucha wejściowego, które nie są po słowie The
lub the
.
(?<!(T|t)he\s)(cat) => The cat sat on cat.
Testuje wyrażenie regularne
Flagi
Flagi są także nazywane modyfikatorami, ponieważ modyfikują wyjście wyrażenia regularnego
. Flagi te mogą być używane w dowolnej kolejności lub kombinacji i są
integralną częścią RegExp.
5.1 Nierozróżnianie wielkości liter
Modyfikator i
jest używany do wykonywania dopasowywania bez rozróżniania wielkości liter. Na przykład, wyrażenie regularne /The/gi
oznacza: wielka litera T
, po której następuje mała litera h
, po której następuje znak e
. A na końcu wyrażenia regularnego flaga i
mówi silnikowi wyrażeń regularnych, aby zignorował wielkość liter. Jak widzisz, podaliśmy również flagę g
, ponieważ chcemy szukać wzorca w całym łańcuchu wejściowym.
The => The fat cat sat on the mat.
Testuj wyrażenie regularne
/The/gi => The fat cat sat on the mat.
Testuj wyrażenie regularne
5.2 Wyszukiwanie globalne
Modyfikator g
jest używany do wykonywania globalnego dopasowania (znalezienia wszystkich dopasowań zamiast zatrzymywania się po pierwszym dopasowaniu). Na przykład, wyrażenie regularne /.(at)/g
oznacza: dowolny znak z wyjątkiem nowej linii, po którym następuje znak małej litery a
, po którym następuje znak małej litery t
. Ponieważ podaliśmy flagę g
na końcu wyrażenia regularnego, teraz znajdzie ono wszystkie dopasowania w łańcuchu wejściowym, a nie tylko pierwsze (co jest zachowaniem domyślnym).
/.(at)/ => The fat cat sat on the mat.
Testuj wyrażenie regularne
/.(at)/g => The fat cat sat on the mat.
Testuj wyrażenie regularne
5.3 Wieloliniowe
Modyfikator m
jest używany do wykonywania dopasowań wieloliniowych. Jak omawialiśmy wcześniej
anchory (^, $)
są używane do sprawdzania, czy wzorzec jest początkiem lub końcem łańcucha wejściowego. Jeśli jednak chcemy, aby kotwice działały na każdej linii, używamy flagim
. Na przykład, wyrażenie regularne /at(.)?$/gm
oznacza: mała
znak a
, po którym następuje mała litera t, opcjonalnie cokolwiek z wyjątkiem
nowej linii. I z powodu flagi m
teraz silnik wyrażeń regularnych dopasowuje wzór na końcu każdej linii w łańcuchu.
/.at(.)?$/ => The fat
cat sat
on the mat.
Testuj wyrażenie regularne
"/.at(.)?$/gm" => The fat
cat sat
on the mat.
Testuj wyrażenie regularne
Pasowanie zachłanne vs leniwe
Domyślnie regex wykona pasowanie zachłanne, to znaczy dopasuje tak długo, jak
możliwe. Możemy użyć ?
aby dopasować w sposób leniwy, czyli tak krótki jak to tylko możliwe
/(.*at)/ => The fat cat sat on the mat.
Testuj wyrażenie regularne
/(.*?at)/ => The fat cat sat on the mat.
Testuj wyrażenie regularne
I tym samym ten post dobiega końca. Mam nadzieję, że ten post był pomocny. Upewnij się, że przećwiczyłeś to czego się nauczyłeś używając serwisów takich jak regexr.com lub regex101.com.