Regex: literały i konkatenacja
Po tej lekcji wiesz, czym jest wzorzec, jak dopasowuje się zwykły tekst i jak z krótkich wzorców powstają dłuższe. To pierwszy klocek każdego wyrażenia regularnego.
W jednej minucie
Wzorzec to zapis opisujący, jakich ciągów znaków szukasz w tekście.1
Wzorzec z samych zwykłych znaków pasuje do tekstu, który ma te same znaki w tej samej kolejności. Dłuższy wzorzec powstaje przez ustawienie krótszych jeden za drugim.
Szukasz dosłownie kropki? Napisz \., a nie ..
Co robi wyrażenie regularne
Wyrażenie regularne odpowiada na jedno pytanie: czy w tym tekście jest coś, co pasuje do mojego opisu?
Wyrażenie regularne to mechanizm wybierania konkretnych ciągów znaków ze zbioru ciągów znaków.1
- Wzorzecopis szukanego
- Tekstprzeszukiwany ciąg
- Szukanieporównanie znaków
- Wynikpasuje albo nie
Dopasowanie to ciąg znaków w tekście, który odpowiada ciągowi opisanemu przez wzorzec.1
grep korzysta z tego mechanizmu: wypisuje linie, w których znajdzie dopasowanie.2
Znak zwykły: litera pasuje do siebie
Najprostszy wzorzec to zwykły tekst. Każdy jego znak oznacza po prostu samego siebie.
Znak zwykły to znak we wzorcu, który dopasowuje samego siebie, o ile nie jest znakiem specjalnym.1
| Wzorzec | Tekst | Wynik |
|---|---|---|
kot | kot na dachu | pasuje |
kot | kotlet | pasuje |
kot | Kot na dachu | nie pasuje |
kot | pies | nie pasuje |
Wzorzec pasuje do fragmentu tekstu, nie musi obejmować całej linii. Wyniki sprawdziliśmy poleceniem grep w wersji 3.11.
Wielkość liter się liczy, bo dopasowanie opiera się na kodzie znaku, a nie na jego wyglądzie.1 Dopiero opcja -i w grep każe ignorować różnice wielkości liter.2
Konkatenacja: wzorce jeden za drugim
Dłuższy wzorzec to krótsze wzorce ustawione obok siebie. Nie potrzebujesz do tego żadnego znaku łączącego.
Konkatenacja to sklejenie wzorców jeden za drugim: pasuje tekst, w którym po fragmencie pasującym do pierwszego idzie fragment pasujący do drugiego.1
- kpasuje do k
- ozaraz potem o
- tzaraz potem t
- kotcały wzorzec
Wzorzec kot to konkatenacja trzech wzorców: k, o i t. Pasuje do tekstu „kot”, bo po k stoi o, a po nim t.
Gdzie zaczyna się dopasowanie
Gdy tekst jest dłuższy od wzorca, ktoś musi wybrać miejsce, od którego dopasowanie się zaczyna.
Specyfikacja mówi, że szukanie rusza od początku tekstu i kończy się na pierwszym dopasowaniu, czyli tym, które zaczyna się najwcześniej.1
- Zacznij od pierwszego znaku:
anie pasuje dob, więc dopasowanie nie zaczyna się tutaj. - Przesuń się o jeden znak: od drugiego znaku tekst to
bc, więc wzorzec pasuje. - Zatrzymaj się: dopasowanie to znaki 2–3. Drugie
bc(znaki 5–6) zaczyna się później, więc nie jest pierwsze.
To nasze uproszczenie. Opisuje wynik zgodny ze specyfikacją, a nie to, jak silnik jest zbudowany w środku.
Gdy znak przestaje być zwykły
Nie każdy znak dopasowuje sam siebie. Niektóre mają we wzorcu własne znaczenie, ale tylko w określonych miejscach.1
Trzy takie znaki to kropka ., nawias kwadratowy [ i ukośnik wsteczny \.1 Kropka pasuje do dowolnego znaku.1
Ukośnik wsteczny przed znakiem specjalnym zamienia go z powrotem w znak dosłowny.1
printf 'a.c\nabc\n' > u.txt
grep 'a.c' u.txt # wypisze a.c oraz abc
grep 'a\.c' u.txt # wypisze tylko a.c
W wzorcu a.c kropka pasuje do dowolnego znaku, więc łapiesz też abc. Żeby znaleźć samą kropkę, napisz a\.c.
Częste błędy
Trzy pomyłki zdarzają się najczęściej, gdy zaczynasz pisać wzorce.
| Błąd | Skutek | Poprawka |
|---|---|---|
Szukasz kot, a w tekście jest Kot | brak dopasowania | Użyj -i w grep |
Wzorzec a.c zamiast a\.c | pasuje też abc | Poprzedź kropkę ukośnikiem wstecznym |
| Wzorzec bez cudzysłowu w powłoce | ryzyko błędu | Ujmij wzorzec w cudzysłów |
Kolumna „Poprawka” to nasza rekomendacja, nie cytat ze specyfikacji.
W powłoce wzorzec zwykle ujmujesz w cudzysłów, żeby powłoka nie zmieniła go przed przekazaniem do grep.2
Pytania sprawdzające
Czym różni się znak zwykły od znaku specjalnego we wzorcu?
Znak zwykły dopasowuje samego siebie. Znak specjalny, np. kropka, ma własne znaczenie i nie oznacza dosłownie siebie.
Czy wzorzec kot pasuje do tekstu „Kot na dachu”? Dlaczego?
Nie. Dopasowanie opiera się na kodzie znaku, więc K i k to różne znaki. Dopiero opcja -i w grep ignoruje wielkość liter.
Co znaczy, że wzorzec kot jest konkatenacją?
To trzy wzorce k, o i t ustawione jeden za drugim. Pasuje tekst, w którym te znaki idą w tej kolejności.
Dlaczego a.c pasuje do abc i jak to zmienić?
Kropka pasuje do dowolnego znaku, więc w środku może stać b. Żeby szukać dosłownej kropki, napisz a\.c.
Wzorzec bc pasuje do tekstu abcabc w dwóch miejscach. Które dopasowanie wybierze silnik?
To, które zaczyna się najwcześniej, czyli znaki 2–3.
Podsumowanie
- Wyrażenie regularne wybiera z tekstu ciągi znaków opisane wzorcem.
- Znak zwykły dopasowuje samego siebie, a wielkość liter ma znaczenie.
- Konkatenacja to wzorce ustawione jeden za drugim.
- Dopasowanie zaczyna się w najwcześniejszym możliwym miejscu tekstu.
- Kropka,
[i\są znakami specjalnymi; ukośnik wsteczny zamienia znak specjalny w dosłowny. - W powłoce wzorzec zwykle ujmujesz w cudzysłów.
Źródła
- Regular Expressions — The Open Group (POSIX.1-2017)sprawdzone 2026-11-03
- GNU Grep 3.12 — GNU Projectsprawdzone 2026-11-03