Spis treści

Wyrażenia regularne

Wyrażenia regularne (ang. regular expressions, regex, regexp) to wzorce używane do wyszukiwania i przetwarzania tekstu. Pozwalają definiować złożone kryteria wyszukiwania, obejmujące pojedyncze znaki, grupy znaków, powtarzające się wzorce i wiele innych konstrukcji.

POSIX BRE (Basic Regular Expressions) i ERE (Extended Regular Expressions) to dwa warianty składni wyrażeń regularnych. BRE jest bardziej ograniczony i wymaga użycia znaków ucieczki (backslash) w niektórych konstrukcjach, podczas gdy ERE oferuje bardziej rozbudowaną składnię, w której nie trzeba ich stosować.

Podstawowe składniki wyrażeń regularnych

Konstrukcja BRE ERE
Dowolny pojedynczy znak . .
Klasa znaków [abc] [abc]
[a-z] [a-z]
Klasa wykluczająca [^abc] [^abc]
Początek linii ^ ^
Koniec linii $ $
Zero lub więcej a* a*
Jedno lub więcej a+ a+
Zero lub jedno a? a?
Powtórzenia {n} razy a{2} a{2}
Powtórzenia {n,m} a{2,4} a{2,4}
Grupowanie (abc) (abc)
Alternatywa (abc|def) (abc|def)
Granice słowa (GNU) <word> <word>
Program BRE ERE
grep grep 'pattern' file grep -E 'pattern' file
egrep egrep 'pattern' file
sed sed -n '/pattern/p' file sed -E -n '/pattern/p' file
awk awk '/pattern/ {print}' file
bash (if) if [[ $var =~ pattern ]]; then … fi

Przykłady użycia

Dopasowanie adresu e-mail:

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
  
Dopasowanie daty w formacie dd/mm/yyyy:
[0-9]{2}/[0-9]{2}/[0-9]{4}

Dopasowanie słowa zaczynającego się na „a” i kończącego na „e”:

\<a\w*e\>

Przykładowe polecenia

grep 'a.*e' /usr/share/dict/words
ls /bin | grep -E '^.{3}$'
grep '^a.*e$' /usr/share/dict/words
grep 'a.*a.*a' /usr/share/dict/words
grep -v '^$' plik.txt

Zasoby online