Wyrażenia regularne (ang. regular expressions, regex, regexp) to wzorce używane do wyszukiwania i manipulacji tekstem. Pozwalają one na definiowanie złożonych kryteriów wyszukiwania, które mogą obejmować pojedyncze znaki, grupy znaków, powtarzające się wzorce i wiele innych.
POSIX BRE (Basic Regular Expressions) i ERE (Extended Regular Expressions) to dwa standardy definiujące składnię wyrażeń regularnych. BRE jest bardziej ograniczony i wymaga użycia znaków ucieczki (backslash) dla niektórych konstrukcji, podczas gdy ERE oferuje bardziej rozbudowane możliwości bez konieczności stosowania znaków ucieczki.
| 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 |
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\>
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