Wyrażenia regularne
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.
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
- RegExr an online tool to learn, build, & test Regular Expressions
- Regex cheatsheet - porównanie BRE, ERE, PCRE