Wyrażenia
regularne
dr inż. Ireneusz Mrozek
dr inż. Andrzej Chmielewski
Wydział Informatyki
Politechniki Białostockiej
Wyrażenia regularne
Wyrażenia
regularne
Wzorce opisujące łańcuchy symboli
Wyrażenia regularne mogą:
- określać zbiór pasujących łańcuchów
- wyszczególniać istotne części łańcucha
^(.?:[09]{1,3}\.){3}[09]{1,3}$
Metaznaki
Wyrażenia
regularne
Metaznaki (wildcards) – symbole specjalne, które powłoka zastąpi
konkretnymi znakami
^ $ ? * [ ( ) \ | {
( ) - służą do grupowania symboli
{ } - służą do określenia wielokrotności występowania
danego symbolu
\ - znak ucieczki, likwiduje znaczenie specjalne metaznaku
^ - początek wiersza
^a - łańcuchy rozpoczynające się od litery „a”
$ - koniec wiersza
a$ - łańcuchy kończące się literą „a”
Metaznaki – powtarzanie zakresów
Wyrażenia
regularne
.
- dokładnie 1 znak
r.k
np. rak, ryk etc.
*
- 0 lub więcej wystąpień poprzedniego znaku
abc*
np. ab, abc, abcc, abccc etc.
+
- 1 lub więcej wystąpień poprzedniego znaku
abc+
np. abc, abcc, abccc etc., ale nie ab
?
- 0 lub 1 wystąpienie
abc? ab lub abc
{n}
- n wystąpień poprzedniego znaku
a{3}
aaa
{n,m}
- co najmniej n i co najwyżej m wystąpień poprzedniego znaku
a{2,4}
aa lub aaa lub aaaa
Metaznaki – [ ]
Wyrażenia
regularne
{,n}
- co najwyżej n wystąpień poprzedniego znaku
a{,2}
a lub aa lub „pusty”
{n,}
- co najmniej n wystąpień poprzedniego znaku
a{2,}
aa lub aaa lub aaaa lub ….
[ ]
- znaki wymienione pomiędzy [ ]
a[lrs]a ala lub ara lub asa
[a-zA-Z_] duża lub mała litera lub podkreślnik
[^ ]
- wszystkie znaki poza wymienionymi pomiędzy [ ]
a[^lrs]a wszystkie oprócz: ala, ara i asa
|
- OR
ala|zosia
ala lub zosia
Predefiniowane klasy znakowe
Wyrażenia
regularne
Symbol
Znaczenie
\d
cyfra
\D
inny niż cyfra (\d)
\w
litera, cyfra lub podkreślenie
\W
inny niż \w
\s
odstęp
\S
inny niż \s
Predefiniowane symbole
Przykłady
Wyrażenia
regularne
Kod pocztowy
^[09]{2}[09]{3}$
lub
^\d{2}\d{3}$
Adres www
^www\.[\w]+(\.[\w]+)+$
Adres e-mail z domeny lub subdomeny pb.edu.pl
^[az09_.]+@([az09_.]+\.)*pb.edu.pl$
Adres IP
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
a co z ciągami typu: 555.444.888.999?
czy to jest poprawny adres IP?
Przykłady
Przykłady
Wyrażenia
regularne
Adres IP
^0*(25[05]|2[04]\d|1?\d\d?)(\.0*(25[05]|2[04]\d|1?\d\d?)){3}$
Przykłady
Edytory strumieniowe
Wyrażenia
regularne
Edytory strumieniowe: sed oraz awk
Wyrażenia regularne najczęściej są wykorzystywane do przetwarzania
plików tekstowych za pomocą edytorów strumieniowych
sed
$ sed 's/a.a/bbb/' file.txt
Awk
$ awk F ":" '{
BEGIN { x = 0 }
/^$/ { x = x + 1 }
END { print x }
}' file.txt
Wyszukiwanie wzorców
Wyrażenia
regularne
Polecenie grep
Wyszukanie linii w pliku zawierających podany wzorzec
grep [wzorzec] <plik>
Wyszukanie linii w pliku NIE zawierających wzorca
grep v [wzorzec] <plik>
$ grep '^r' /etc/passwd
root:x:0:0:root:/root:/bin/bash
rtkit:x:111:122:RealtimeKit,,,:/proc:/bin/false