Wiedza fundamentalna› 1. Wyrażenia regularne›Lekcja 1.4 FUND-04

Regex: klasy znaków, kropka i kotwice

Po tej lekcji wiesz, jak wzorzec opisuje, jaki znak stoi w danym miejscu, i jak przypiąć go do początku lub końca linii. Wiesz też, po co są klasy znaków.

~4 min czytania3 pojęcia4 pytaniasprawdzone ze źródłami 3 lis 2026
Źródła (2)

W jednej minucie

Definicja

Wyrażenie nawiasowe to zapis w nawiasach kwadratowych, który pasuje do jednego znaku z określonego zbioru.1

Ważne

Kropka i nawiasy kwadratowe opisują, jaki znak stoi w danym miejscu. Kotwice ^ i $ opisują, gdzie w linii wzorzec ma pasować.

Zapamiętaj

Szukasz dosłownej kropki i nie chcesz ukośnika? Ujmij ją w nawiasy: [.].1

Kropka: dowolny znak

Kropka zastępuje jeden dowolny znak. Specyfikacja wyklucza tylko znak NUL.1

Tekstc.tDlaczego
catpasujekropka = a
cutpasujekropka = u
ctnie pasujebrak znaku między c i t
coatnie pasujemiędzy c i t są dwa znaki

Wyniki sprawdziliśmy poleceniem grep w wersji 3.11.

Nawiasy kwadratowe: jeden znak z zestawu

Nawiasy kwadratowe wymieniają znaki, z których dokładnie jeden ma pasować. Całe wyrażenie zajmuje jedno miejsce we wzorcu.1

ZapisPasuje doPrzykład
[ae]jednego znaku a lub egr[ae]y: gray, grey
[0-9]jednej cyfry z zakresua[0-9]: a1
[^0-9]jednego znaku, który nie jest cyfrą[^0-9]+: abc

Przykłady sprawdziliśmy w GNU grep 3.11.

Zakres 0-9 obejmuje wszystkie znaki między dwoma podanymi, włącznie z nimi, ale tylko w ustawieniach POSIX.1 Znak ^ na początku zestawu odwraca jego znaczenie.1

Uwaga — zakresy zależą od ustawień regionalnych

W innych ustawieniach regionalnych zakres ma zachowanie nieokreślone.1 Zakresu liter, np. a-z, nie traktuj jako pewnego zbioru wszystkich liter.

Klasy znaków

Klasa znaków to gotowa nazwa zamiast ręcznej listy, na przykład dla wszystkich cyfr.

Definicja

Klasa znaków to nazwany zestaw znaków, np. cyfr albo liter, który zapisujesz wewnątrz wyrażenia nawiasowego.1

KlasaZnaki
[:digit:]cyfry
[:alpha:]litery
[:alnum:]litery i cyfry
[:upper:]wielkie litery
[:lower:]małe litery
[:space:]znaki odstępu

Nazwy pochodzą ze specyfikacji. Opis w drugiej kolumnie to nasz skrót.

Specyfikacja wymaga tych klas we wszystkich ustawieniach regionalnych.1

printf '2026\nrok2026\nabc\n' | grep -xE '[[:digit:]]+'
# wypisze tylko 2026
# klasa stoi wewnątrz nawiasów: [[:digit:]], nie [:digit:]

Kotwice: gdzie ma pasować wzorzec

Do tej pory wzorzec mógł pasować w dowolnym miejscu linii. Kotwice to zmieniają.

Definicja

Kotwica to znak ^ lub $, który ogranicza dopasowanie do początku lub końca tekstu.1

Tekst^kotkot$^kot$
kotpasujepasujepasuje
kotletpasujenienie
pies kotniepasujenie
mokotniepasujenie

Wyniki sprawdziliśmy poleceniem grep w wersji 3.11.

Znak ^ przypina wzorzec do początku tekstu.1 Dolar $ robi to samo z końcem. Oba razem dopasowują tylko cały tekst.1 W grep tekstem jest jedna linia.1

Zapamiętaj

Opcja -x z grep działa jak otoczenie wzorca znakami ^ i $.2

Częste błędy

Trzy pomyłki zdarzają się najczęściej przy zbiorach znaków i kotwicach.

BłądSkutekPoprawka
[:digit:] zamiast [[:digit:]]grep zgłasza błądWstaw klasę w nawiasy kwadratowe
[^a] mylone z ^ainne znaczenie[^a] to nie-a, ^a to a na początku
[a-z] jako wszystkie literyzależy od ustawieńUżyj klasy [[:lower:]]

Kolumna „Poprawka” to nasza rekomendacja, nie cytat ze specyfikacji. Pierwszy wiersz sprawdziliśmy w GNU grep 3.11.

Uwaga — znaki w nawiasach tracą specjalne znaczenie

Wewnątrz nawiasów kropka i gwiazdka są zwykłymi znakami.1 Wzorzec [.*] szuka kropki albo gwiazdki.

Pytania sprawdzające

Dlaczego c.t nie pasuje do tekstu coat?

Kropka zastępuje dokładnie jeden znak, a między c i t w coat są dwa znaki.

Czym różni się [^0-9] od ^0?

[^0-9] to jeden znak, który nie jest cyfrą. ^0 to zero na początku linii. Znak ^ ma inne znaczenie w zależności od miejsca.

Dlaczego klasę [:digit:] piszesz w podwójnych nawiasach?

Klasa jest elementem wyrażenia nawiasowego, więc musi stanąć wewnątrz nawiasów kwadratowych: [[:digit:]]. Samo [:digit:] to błąd.

Jak dopasować linię, która jest dokładnie słowem kot?

Obułóż wzorzec kotwicami: ^kot$. Alternatywą jest opcja -x.

Podsumowanie

  • Kropka dopasowuje dowolny jeden znak poza NUL.
  • Wyrażenie nawiasowe pasuje do jednego znaku z zestawu, a ^ na jego początku odwraca zestaw.
  • Zakres liter zależy od ustawień regionalnych, więc bezpieczniej używać klas znaków.
  • Klasa znaków, np. [:digit:], stoi wewnątrz nawiasów kwadratowych.
  • Kotwice ^ i $ przypinają wzorzec do początku i końca linii.
  • Wewnątrz nawiasów kropka i gwiazdka tracą znaczenie specjalne.

Źródła

  1. Regular Expressions — The Open Group (POSIX.1-2017)sprawdzone 2026-11-03
  2. GNU Grep 3.12 — GNU Projectsprawdzone 2026-11-03