Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
Wyra¿enia regularne.
Leksykon kieszonkowy.
Wydanie II
Autor: Tony Stubblebine
T³umaczenie: Piotr Rajca
ISBN: 978-83-246-1392-2
Tytu³ orygina³u:
Regular Expression
Pocket Reference
Format: B6, stron: 160
Poznaj wyra¿enia regularne, aby wykorzystaæ moc ich mo¿liwoci
w najpopularniejszych jêzykach programowania!
Chcesz poznaæ przepisy na wyra¿enia regularne?
Chcesz wykorzystywaæ mo¿liwoci Unicode w jêzyku Ruby, Java, Perl, PHP,
Pyton, C oraz .NET?
Chcesz wiedzieæ, jak stosowaæ wyra¿enia regularne zaimplementowane w
ró¿nych jêzykach programowania?
Wyra¿enia regularne s¹ narzêdziem umo¿liwiaj¹cym analizê i modyfikowanie tekstu
przez dopasowywanie wzorców. S¹ one ³añcuchem znaków zawieraj¹cym kombinacjê
normalnych znaków oraz specjalnych metaznaków i metasekwencji, a dopasowywanie
wzorców polega na odszukaniu fragmentu ³añcucha opisywanego przez wyra¿enie
regularne. Wyra¿enia te znajduj¹ zastosowanie przy sprawdzaniu wartoci zmiennych,
zmianie formatu, przeprowadzaniu z³o¿onych operacji wyszukiwania oraz weryfikowaniu
poprawnoci danych tekstowych.
Ksi¹¿ka
Wyra¿enia regularne. Leksykon kieszonkowy
stanowi podrêczny niezbêdnik
dla wszystkich pisz¹cych programy przetwarzaj¹ce teksty. Oprócz zagadnieñ
podstawowych, takich jak sk³adnia wyra¿eñ regularnych oraz operacje, w których s¹
wykorzystywane, leksykon zawiera inne niezwykle pomocne i bardziej zaawansowane
informacje dotycz¹ce na przyk³ad narzêdzi obs³ugi wyra¿eñ w jêzyku Ruby oraz na
serwerze WWW Apache. Czytaj¹c tê ksi¹¿kê, nie tylko zdobêdziesz konkretn¹ wiedzê,
ale równie¿ niezbêdne umiejêtnoci praktyczne miêdzy innymi dowiesz siê, jak
wykorzystaæ znajomoæ wyra¿eñ regularnych we wszystkich rodowiskach.
Metaznaki, tryby oraz konstrukcje
Reprezentacja i klasy znaków
Komentarze i modyfikatory trybów
Narzêdzia obs³ugi wyra¿eñ regularnych w jêzyku Ruby oraz na serwerze WWW
Apache
Operatory wyra¿eñ regularnych w jêzyku Perl 5.8
Obiekty i metody do obs³ugi wyra¿eñ regularnych w jêzyku JavaScript
Funkcje obs³ugi wyra¿eñ regularnych w jêzyku PHP i edytorze vi
Obiekty i funkcje wyra¿eñ regularnych w jêzyku Pyton
Programy obs³ugiwane z wiersza poleceñ
Wyra¿enia regularne to nieocenione narzêdzia w pracy programisty
nie mo¿esz siê bez nich obejæ!
3
Spis tre
ļci
O ksi
éżce ............................................................................................. 8
Przedstawienie wyra
żeħ regularnych
oraz zagadnie
ħ dopasowywania wzorców ........................................9
Metaznaki, tryby oraz konstrukcje
12
Obsäuga Unicode
23
Przepisy na wyra
żenia regularne ................................................... 24
Przepisy
24
Perl 5.8 ...............................................................................................27
Obsäugiwane metaznaki
28
Operatory wyraĔeþ regularnych
34
Obsäuga Unicode
37
Przykäady
38
Inne Ēródäa informacji
39
Java (java.util.regex) ....................................................................... 40
Obsäugiwane metaznaki
40
Klasy i interfejsy zwiñzane z wykorzystaniem
wyraĔeþ regularnych
45
Obsäuga Unicode
54
Przykäady
54
Inne Ēródäa informacji
56
4
_ Wyra
żenia regularne. Leksykon kieszonkowy
.NET i C# .............................................................................................57
Obsäugiwane metaznaki
57
Klasy i interfejsy zwiñzane z wykorzystaniem wyraĔeþ
regularnych
62
Obsäuga Unicode
68
Przykäady
69
Inne Ēródäa informacji
71
PHP ..................................................................................................... 71
Obsäugiwane metaznaki
71
Funkcje obsäugi wyraĔeþ regularnych
76
Przykäady
80
Inne Ēródäa informacji
81
Python ................................................................................................81
Obsäugiwane metaznaki
82
Obiekty i funkcje moduäu re
86
Obsäuga Unicode
91
Przykäady
91
Inne Ēródäa informacji
92
Ruby .................................................................................................. 93
Obsäugiwane metaznaki
93
Interfejs obiektowy
97
Obsäuga Unicode
104
Przykäady
105
JavaScript .........................................................................................106
Obsäugiwane metaznaki
106
Metody i obiekty zwiñzane z wykorzystaniem
wyraĔeþ regularnych
109
Przykäady
113
Inne Ēródäa informacji
115
Spis tre
ļci _ 5
Biblioteka PCRE ............................................................................... 115
Obsäugiwane metaznaki
116
PCRE API
122
Obsäuga Unicode
127
Przykäady
127
Inne Ēródäa informacji
130
Serwer WWW Apache .................................................................... 131
Obsäugiwane metaznaki
131
RewriteRule
135
Dyrektywy dopasowywania
138
Przykäady
139
Edytor vi ...........................................................................................140
Obsäugiwane metaznaki
140
Dopasowywanie wzorców
144
Przykäady
145
Inne Ēródäa informacji
146
Programy obs
ĥugiwane z wiersza poleceħ ...................................146
Obsäugiwane metaznaki
147
Inne Ēródäa informacji
152
Skorowidz ........................................................................................153
Przedstawienie wyra
żeħ regularnych _
9
Podzi
ýkowania
Jeffrey Friedl napisaä doskonaäñ ksiñĔkö na temat wyraĔeþ regular-
nych — WyraĔenia regularne (wydanñ przez wydawnictwo Helion
w 2001 roku) — piszñc niniejszy Leksykon, korzystaäem zarówno
z tej ksiñĔki, jak i z rad Jeffreya.
W pracach nad, jak siö okazaäo, trudnym, pierwszym wydaniem
niniejszego Leksykonu pomagali mi doskonali redaktorzy: Nat Tor-
kington oraz Linda Mui. W pracach nad tym wydaniem ksiñĔki
wspieraä mnie swym ogromnym redakcyjnym talentem Andy
Oram. Na szczególne podziökowania zasäuguje Sarah Burcham
— za danie mi okazji do napisania niniejszej ksiñĔki oraz za po-
moc nad rozdziaäem dotyczñcym programów wykonywanych
z poziomu wiersza poleceþ. Podziökowania za pomoc i korektö
technicznñ pragnö skierowaè takĔe do nastöpujñcych osób: Jeffreya
Friedla, Philipa Hazela, Steve’a Friedla, Ola Biniego, Iana Dar-
wina, Zaka Greanta, Rona Hitchensa, A.M. Kuchling, Tima All-
wine’a, Schuylera Erlego, Davida Lentsa, Rabble’a, Richa Bowana,
Erica Eisenharta i Brada Merrilla.
Przedstawienie wyra
żeħ regularnych
oraz zagadnie
ħ dopasowywania wzorców
Przedstawienie wyra
żeħ regularnych
Wyra
Ĕenie regularne to äaþcuch znaków zawierajñcy kombinacjö
normalnych znaków oraz specjalnych metaznaków i metasekwen-
cji. Normalne znaki odpowiadajñ samym sobie. Metaznaki oraz
metasekwencje to, odpowiednio, znaki i sekwencje reprezentujñce
takie abstrakcje, jak iloĈè pewnych znaków, ich poäoĔenie lub
rodzaj. Lista zamieszczona w podrozdziale „Metaznaki, tryby oraz
konstrukcje” przedstawia metaznaki oraz metasekwencje najczö-
Ĉciej spotykane w Ĉwiecie wyraĔeþ regularnych. W dalszych czö-
Ĉciach ksiñĔki zostaäy podane szczegóäowe informacje dotyczñce
dostöpnoĈci oraz skäadni zapisu konkretnych metaznaków w po-
szczególnych implementacjach wyraĔeþ regularnych.
10
_ Wyra
żenia regularne. Leksykon kieszonkowy
Dopasowywanie wzorców polega na odszukaniu fragmentu äaþcucha
znaków opisywanego przez wyraĔenie regularne (czyli fragmentu
pasujñcego do tego wyraĔenia). Kod, który realizuje to dopasowa-
nie, okreĈlany jest mianem mechanizmu wyraĔeþ regularnych (ang.
Regular Expression Engine). Wyniki wykonania wiökszoĈci operacji
z wykorzystaniem wyraĔeþ regularnych moĔna odgadnñè, pa-
miötajñc o dwóch zasadach:
1. Pierwsze dopasowanie (poäoĔone najbardziej z lewej) wygrywa.
Dopasowywanie wyraĔenia regularnego rozpoczyna siö od
pierwszego znaku äaþcucha wejĈciowego i jest realizowane
w kierunku koþca tego äaþcucha. Mechanizm wyraĔeþ regu-
larnych koþczy dziaäanie, gdy tylko zostanie odszukany
fragment äaþcucha pasujñcy do podanego wyraĔenia.
2. Standardowe kwantyfikatory sñ zachäanne.
Kwantyfikatory okreĈlaj
ñ, ile razy pewien element äaþcucha
znaków moĔe byè powtórzony. Standardowe kwantyfikato-
ry starajñ siö dopasowaè dany element äaþcucha maksymal-
nñ liczbö razy. Element jest powtarzany mniejszñ liczbö razy
wyäñcznie w przypadku, gdy jest to konieczne do dopa-
sowania caäoĈci wyraĔenia. Ten proces, polegajñcy na odrzu-
caniu znaków i próbach mniej „zachäannego” dopasowywa-
nia, nosi nazwö sprawdzania wstecznego (ang. backtracking).
Pomiödzy typami poszczególnych mechanizmów obsäugi wyra-
Ĕeþ regularnych wystöpujñ subtelne róĔnice. Istniejñ dwie klasy
takich mechanizmów: Deterministyczne Automaty Skoþczone
(w skrócie: DFA, ang. Deterministic Finite Automaton) oraz Niede-
terministyczne Automaty Skoþczone (w skrócie: NFA, ang. Non-
deterministic Finite Automaton). Mechanizmy naleĔñce do pierwszej
z tych klas dziaäajñ szybciej, lecz nie dysponujñ wieloma cechami
Przedstawienie wyra
żeħ regularnych _
11
mechanizmów niedeterministycznych, takimi jak przechwyty-
wanie, przewidywanie bñdĒ teĔ kwantyfikatory niezachäanne.
Z kolei mechanizmy NFA moĔna podzieliè na dwie podklasy:
tradycyjne oraz POSIX.
Mechanizmy DFA
W mechanizmach DFA kaĔdy znak äaþcucha wejĈciowego
jest porównywany z wyraĔeniem regularnym; wszystkie od-
nalezione dopasowania sñ przy tym przechowywane w pa-
miöci. Mechanizmy tego typu sñ najszybsze, poniewaĔ kaĔdy
znak jest sprawdzany najwyĔej jeden raz. W przypadku ko-
rzystania z mechanizmów DFA naleĔy pamiötaè o jednej
dodatkowej zasadzie — metasekwencje alternatywy („bar|
barak”) sñ zachäanne. Gdy do wejĈciowego äaþcucha znaków
moĔna dopasowaè kilka alternatywnych wersji wyraĔenia
regularnego, zostanie wybrana najdäuĔsza z nich. A zatem
podanñ wczeĈniej reguäö numer 1. moĔna by zmieniè w na-
stöpujñcy sposób: „NajdäuĔsze poäoĔone najbardziej z lewej
strony dopasowanie wygrywa”.
Tradycyjne mechanizmy NFA
W tradycyjnych mechanizmach NFA kaĔdy element wyraĔe-
nia regularnego jest porównywany z wejĈciowym äaþcuchem
znaków; w pamiöci przechowywane sñ miejsca, w których
zostaä dokonany wybór pomiödzy dostöpnymi, alternatyw-
nymi wersjami wyraĔenia. Kiedy nie uda siö dopasowaè
danej wersji, mechanizm cofa siö do ostatniej zapamiötanej
pozycji. W przypadku standardowych kwantyfikatorów me-
chanizmy tego typu zachowujñ siö w sposób zachäanny; jeĈli
jednak nie uda siö w ten sposób dopasowaè wyraĔenia, me-
chanizm cofa siö do zapamiötanych wczeĈniejszych pozycji
i stara siö dopasowaè wyraĔenie, postöpujñc w sposób mniej
zachäanny. W tradycyjnych mechanizmach NFA wykorzy-
stywana jest tak zwana alternatywa uporzñdkowana, w któ-
rej wszystkie dostöpne wersje wyraĔenia sñ sprawdzane
12
_ Wyra
żenia regularne. Leksykon kieszonkowy
sekwencyjnie. DäuĔszy äaþcuch znaków pasujñcy do wyra-
Ĕenia moĔe zostaè zignorowany, jeĈli wczeĈniej uda siö do-
pasowaè innñ wersjö wyraĔenia. W tym przypadku podanñ
wczeĈniej reguäö numer 1. moĔna by zapisaè w nastöpu-
jñcy sposób: „Wykorzystane zostanie pierwsze, poäoĔone
najbardziej z lewej strony dopasowanie po kwantyfikatorze
zachäannym”.
Mechanizmy POSIX NFA
Mechanizmy POSIX NFA dziaäajñ podobnie do mechani-
zmów tradycyjnych NFA z jednñ róĔnicñ: mechanizmy POSIX
zawsze wybierajñ najdäuĔsze poäoĔone najbardziej z lewej
strony dopasowanie. Na przykäad wyraĔenie skäadajñce
siö z dwóch alternatywnych wersji
kat|kategoria
zawsze
zwróci säowo „kategoria”, o ile oczywiĈcie jest to moĔliwe,
nawet jeĈli w pierwszej kolejnoĈci uda siö dopasowaè pierw-
szñ wersjö wyraĔenia (
kat
).
Metaznaki, tryby oraz konstrukcje
Metaznaki oraz metasekwencje przedstawione w tej czöĈci roz-
dziaäu stanowiñ najczöĈciej spotykane typy konstrukcji uĔywa-
nych przy tworzeniu wyraĔeþ regularnych. JednoczeĈnie podana
zostaäa takĔe najczöĈciej spotykana skäadnia zapisu tych meta-
znaków i metasekwencji. NaleĔy jednak pamiötaè, Ĕe zarówno
sposób zapisu, jak i moĔliwoĈci jego stosowania sñ róĔne w róĔ-
nych implementacjach wyraĔeþ regularnych.
Reprezentacja znaków
W wielu implementacjach wyraĔeþ regularnych dostöpne sñ skróty
reprezentujñce znaki, które w innych przypadkach trudno by byäo
zapisaè.
Przedstawienie wyra
żeħ regularnych _ 13
Skrócone reprezentacje znaków
W wiökszoĈci implementacji wyraĔeþ regularnych dostöpne
sñ skróty reprezentujñce nastöpujñce znaki:
alarm
,
backspace
,
escape
,
przesuni
Ăcie wiersza
,
nowy wiersz
,
powrót ka-
retki
,
poziomy znak tabulacji
oraz
pionowy znak tabu-
lacji
. Na przykäad
\n
jest czösto stosowanym skrótowym
sposobem zapisu znaku nowego wiersza, którym zazwyczaj
jest znak
LF
(012 ósemkowo), lecz czasami — w zaleĔnoĈci
od uĔywanego systemu operacyjnego — moĔe nim takĔe
byè znak
CR
(015 ósemkowo). Sporych problemów moĔe tak-
Ĕe przysporzyè skrót
\b
, który w wielu implementacjach
wyraĔeþ regularnych oznacza jednoczeĈnie znak cofniöcia
(
backspace
), jak równieĔ granicö säowa (czyli miejsce, gdzie
znak bödñcy czöĈciñ säowa graniczy ze znakiem, który nie
jest czöĈciñ säowa). W takich przypadkach w klasie znaków
(czyli zbiorze znaków, których moĔna uĔyè do dopasowa-
nia)
\b
oznacza znak cofniöcia, a we wszystkich pozostaäych
przypadkach — granicö säowa.
Ósemkowy zapis unikowy:
\liczba
Reprezentuje znak odpowiadajñcy dwu- lub trzycyfrowej
liczbie ósemkowej. Na przykäad
\015\012
odpowiada se-
kwencji znaków ASCII
CR
LF
.
Szesnastkowy zapis unikowy oraz zapis Unicode:
\xliczba
,
\x{liczba}
,
\uliczba
,
\Uliczba
Reprezentuje znak odpowiadajñcy liczbie szesnastkowej.
Czterocyfrowe lub wiöksze liczby szesnastkowe mogñ repre-
zentowaè zakresy znaków Unicode. Na przykäad
\x0D\x0A
odpowiada sekwencji znaków ASCII
CR
LF
.
Znaki steruj
ñce:
\cznak
Odpowiadajñ one znakom sterujñcym kodu ASCII repre-
zentowanym przez wartoĈci mniejsze od 32. Dla bezpie-
czeþstwa
znak
zawsze naleĔy zapisywaè wielkimi literami,
14
_ Wyra
żenia regularne. Leksykon kieszonkowy
gdyĔ niektóre implementacje nie pozwalajñ w tych przypad-
kach na stosowanie maäych liter. Na przykäad
\cH
odpowiada
kombinacji Control-H, czyli znakowi cofniöcia w kodzie ASCII.
Klasy znaków oraz skrótowe zapisy klas
Klasy znaków to sposób definiowania lub okreĈlania zbiorów zna-
ków. Klasa znaków odpowiada jednemu znakowi äaþcucha wej-
Ĉciowego, który naleĔy do zdefiniowanego zbioru znaków.
Normalne klasy:
[...]
oraz
[^...]
Klasy znaków —
[...]
— oraz zanegowane klasy znaków
—
[^...]
— pozwalajñ na okreĈlenie znaków, które mogñ
oraz które nie mogñ byè dopasowywane. Klasa znaków zaw-
sze odpowiada jednemu znakowi äaþcucha wejĈciowego.
Znak
-
(minus) oznacza pewien zakres znaków. Na przykäad
wyraĔenie
[a-z]
odpowiada dowolnej maäej literze kodu
ASCII. Aby umieĈciè sam minus (
-
) w klasie znaków, naleĔy
go poprzedziè znakiem unikowym.
Prawie ka
Ĕdy znak: kropka (
.
)
Zazwyczaj kropka odpowiada dowolnemu znakowi za wy-
jñtkiem znaku nowego wiersza. Czösto jednak moĔna zmie-
niè tryb dziaäania dopasowywania w taki sposób, aby kropka
odpowiadaäa takĔe znakom nowego wiersza. W obröbie kla-
sy znaków kropka zawsze odpowiada kropce.
Skrótowe zapisy klas znaków:
\w
,
\d
,
\s
,
\W
,
\D
,
\S
Sñ to czösto spotykane skrótowe sposoby zapisu klas znaków
reprezentujñcych säowa, cyfry oraz znaki odstöpu. Najczö-
Ĉciej za znaki mogñce tworzyè säowa uznawane sñ wszystkie
znaki alfanumeryczne kodu ASCII oraz znak podkreĈlenia.
Niemniej jednak, w zaleĔnoĈci od implementacji wyraĔeþ
regularnych, do grupy znaków alfanumerycznych mogñ byè
takĔe zaliczane znaki lokalne oraz alfanumeryczne znaki Uni-
code. Skrótowy zapis, w którym wykorzystano maäñ literö
Przedstawienie wyra
żeħ regularnych _ 15
(na przykäad
/s
), odpowiada jednemu znakowi z danej kla-
sy; natomiast zapis, w którym zastosowano wielkñ literö
(na przykäad
/S
), odpowiada znakowi, który do danej klasy
nie naleĔy. Na przykäad
\d
odpowiada pojedynczej cyfrze
i zazwyczaj znaczy to samo co wyraĔenie
[0-9]
.
Klasy znaków POSIX:
[:klasa:]
Standard POSIX definiuje kilka klas znaków, których moĔna
uĔywaè wyäñcznie w klasach znaków wyraĔeþ regular-
nych (patrz tabela 1). Na przykäad przyjrzyjmy siö klasie
[:lower:]
. JeĈli zostanie ona zapisana jako
[[:lower:]]
, to
bödzie odpowiadaè wyraĔeniu
[a-z]
kodu ASCII dla danych
ustawieþ lokalnych.
Tabela 1. Klasy znaków POSIX
Klasa
Znaczenie
alnum
Litery i znaki
alpha
Litery
blank
Jedynie odst
ýp lub znak tabulacji
cntrl
Znaki steruj
éce
digit
Cyfry (dziesi
ýtnego systemu liczbowego)
graph
Znaki drukowalne bez odst
ýpu
lower
Ma
ĥe litery
Znaki drukowalne wraz ze znakiem odst
ýpu
punct
Znaki drukowalne z wy
ĥéczeniem liter i cyfr
space
Odst
ýpy
upper
Du
że litery
xdigit
Cyfry szesnastkowe
W
äaĈciwoĈci Unicode, pisma oraz bloki:
\p{w
ĪaŁciwoŁð}
,
\P{w
ĪaŁciwoŁð}
Standard Unicode definiuje klasy znaków, które majñ szcze-
gólne wäaĈciwoĈci, naleĔñ do pewnego pisma (ang. script)
lub istniejñ w pewnym bloku. WäaĈciwoĈci okreĈlajñ na przy-
käad, czy dany znak jest literñ, czy teĔ cyfrñ (patrz tabela 2).
16
_ Wyra
żenia regularne. Leksykon kieszonkowy
Pismo okreĈla róĔne systemy piĈmiennicze, na przykäad
hebrajski, äaciþski czy teĔ Han. Z kolei bloki to zakresy znaków
na mapie znaków Unicode. W niektórych implementacjach
wyraĔeþ regularnych wäaĈciwoĈci Unicode muszñ byè po-
przedzane äaþcuchami
Is
lub
In
. Na przykäad
\p{Ll}
odpo-
wiada dowolnej maäej literze w dowolnym jözyku uwzglöd-
nionym w Unicode, czyli przykäadowo literze
a
lub
Į.
Tabela 2. Standardowe w
äaĈciwoĈci Unicode
W
ĥaļciwoļë
Znaczenie
\p{L}
Litery
\p{Ll}
Ma
ĥe litery
\p{Lm}
Litery modyfikatorów
\p{Lo}
Inne litery. Nie maj
é one wielkoļci ani nie sé uznawane
za modyfikatory
\p{Lt}
Litery tytu
ĥowe
\p{Lu}
Wielkie litery
\p{C}
Kody steruj
éce oraz znaki, które nie należé do innych kategorii
\p{Cc}
Znaki steruj
éce kodów ASCII oraz Latin-1
\p{Cf}
Niewidoczne znaki formatuj
éce
\p{Cn}
Nieprzypisane punkty kodu
\p{Co}
Do zastosowa
ħ prywatnych, na przykĥad logo firmy
\p{Cs}
Znaki zast
ýpujéce
\p{M}
Znaczniki przeznaczone do
ĥéczenia ze znakami bazowymi,
na przyk
ĥad akcenty
\p{Mc}
Znaki modyfikuj
éce, wymagajéce odrýbnego miejsca.
Przyk
ĥadem mogé tu byë „znaki samogĥosek”
\p{Me}
Znaki otaczaj
éce inne znaki, na przykĥad okrýgi, kwadraty
oraz romby
\p{Mn}
Znaki modyfikuj
éce inne znaki, na przykĥad akcenty bédŚ też
znaki przeg
ĥosu
\p{N}
Znaki liczbowe
\p{Nd}
Liczby dziesi
ýtne w różnych pismach
\p{Nl}
Litery b
ýdéce cyframi, na przykĥad cyfry rzymskie
Przedstawienie wyra
żeħ regularnych _ 17
Tabela 2. Standardowe w
äaĈciwoĈci Unicode (ciñg dalszy)
W
ĥaļciwoļë
Znaczenie
\p{No}
Indeksy górne i dolne, symbole oraz inne znaki reprezentuj
éce
liczby, które jednak nie s
é cyframi
\p{P}
Znaki przestankowe
\p{Pc}
Ĥéczéce znaki przestankowe, na przykĥad znak podkreļlenia
\p{Pd}
Kreski i
ĥéczniki
\p{Pe}
Zamykaj
éce znaki przestankowe, dopeĥniajéce znaki
reprezentowane przez
\p{Ps}
\p{Pi}
Pocz
étkowe znaki przestankowe, takie jak cudzysĥów otwierajécy
\p{Pf}
Ko
ħcowe znaki przestankowe, takie jak cudzysĥów zamykajécy
\p{Po}
Inne znaki przestankowe
\p{Ps}
Otwieraj
éce znaki przestankowe, na przykĥad nawias otwierajécy
\p{S}
Symbole
\p{Sc}
Waluty
\p{Sk}
Znaki
ĥéczéce, reprezentowane jako niezależne znaki
\p{Sm}
Symbole matematyczne
\p{So}
Inne symbole
\p{Z}
Znaki oddzielaj
éce, które nie posiadajé żadnej widocznej
reprezentacji
\p{Zl}
Separatory wierszy
\p{Zp}
Separatory akapitów
\p{Zs}
Znaki odst
ýpu
Sekwencja znaków
äñczonych Unicode:
\X
Odpowiada znakowi bazowemu Unicode, po którym moĔe
byè umieszczona dowolna liczba znaków äñczñcych Unicode.
Jest to uproszczony sposób zapisu wyraĔenia
\P{M}\p{M}
.
Na przykäad
\X
odpowiada znakowi è, jak równieĔ dwóm
znakom
e'
.
18
_ Wyra
żenia regularne. Leksykon kieszonkowy
Punkty zakotwiczenia oraz warunki o zerowej d
ĥugoļci
Punkty zakotwiczenia oraz warunki o zerowej däugoĈci odpowia-
dajñ miejscom w wejĈciowym äaþcuchu znaków.
Pocz
ñtek wiersza lub äaþcucha znaków:
^
,
\A
Pasuje do poczñtku przeszukiwanego äaþcucha znaków.
W trybie wielowierszowym
^
pasuje do kaĔdego miejsca
bezpoĈrednio po dowolnym znaku nowego wiersza. Niektó-
re implementacje wyraĔeþ regularnych udostöpniajñ meta-
znak
\A
, który odpowiada samemu poczñtkowi caäego tekstu.
Koniec wiersza lub
äaþcucha znaków:
$
,
\Z
,
\z
Metaznak
$
pasuje do koþca äaþcucha znaków. W sytuacjach,
gdy dostöpny jest metaznak
\Z
, pasuje on do koþca äaþcu-
cha lub miejsca poäoĔonego bezpoĈrednio przed znakiem
koþca wiersza koþczñcego äaþcuch znaków — i to niezaleĔnie
od trybu, w jakim jest przeprowadzane dopasowywanie. Nie-
które implementacje wyraĔeþ regularnych obsäugujñ takĔe
metaznak
\z
, który — niezaleĔnie od trybu dopasowywania
— pasuje do samego koþca äaþcucha.
Pocz
ñtek dopasowywania:
\G
W przypadku dopasowywania interaktywnego metaznak
\G
pasuje do miejsca, w którym zostaäo zakoþczone poprzednie
dopasowywanie. Czösto zdarza siö, Ĕe w przypadku nieuda-
nego dopasowywania miejsce to zostaje przeniesione na sam
poczñtek przeszukiwanego äaþcucha znaków.
Granica s
äowa:
\b
,
\B
,
\<
,
\>
Metaznaki reprezentujñce granicö säowa pasujñ do miejsca,
w którym znak mogñcy tworzyè säowa sñsiaduje ze znakiem,
który nie moĔe tworzyè säowa. Bardzo czösto metaznak
\b
okreĈla miejsce, w którym znajduje siö granica säowa,
a metaznak
\B
— miejsce, w którym granicy säowa nie ma.
Przedstawienie wyra
żeħ regularnych _ 19
Niektóre implementacje wyraĔeþ regularnych udostöpniajñ
takĔe niezaleĔne metaznaki okreĈlajñce granice poczñtku
i koþca säowa; czösto sñ to
\<
oraz
\>
.
Przewidywanie:
(?=...)
,
(?!...)
Przewidywanie wsteczne:
(?<=...)
,
(?<!...)
Konstrukcje przewidywa
þ pasujñ odpowiednio do tych miejsc
w tekĈcie, gdzie zostaäby dopasowany podwzorzec (prze-
widywanie), gdzie podwzorzec nie zostaäby dopasowany
(przewidywanie negatywne), gdzie znalazäby siö koniec do-
pasowanego podwzorca (przewidywanie wsteczne) lub gdzie
nie znalazäby siö koniec dopasowanego podwzorca (nega-
tywne przewidywanie wsteczne). Na przykäad
pi(?=wo)
pasuje do liter
pi
w säowie
piwo
, ale nie w säowie
pika
.
W niektórych implementacjach wyraĔeþ regularnych kon-
strukcje przewidywania wstecznego sñ ograniczane do pod-
wzorców o z góry okreĈlonej däugoĈci.
Komentarze i modyfikatory trybów
Modyfikatory trybu pozwalajñ na zmienianie sposobu, w jaki me-
chanizmy wyraĔeþ regularnych interpretujñ wyraĔenia regularne.
Tryb wielowierszowy:
m
Zmienia dziaäanie metaznaków
^
oraz
$
w taki sposób, iĔ
pasujñ one do miejsc sñsiadujñcych ze znakami nowego wier-
sza znajdujñcymi siö w wejĈciowym äaþcuchu znaków.
Tryb jednowierszowy:
s
Zmienia dziaäanie metaznaku
.
(kropka) w taki sposób, iĔ
odpowiada on wszystkim znakom äaþcucha wejĈciowego,
w tym takĔe znakom nowego wiersza.
Tryb ignorowania wielko
Ĉci liter:
i
Sprawia, Ĕe litery róĔniñce siö wyäñcznie wielkoĈciñ sñ uwa-
Ĕane za identyczne.
20
_ Wyra
żenia regularne. Leksykon kieszonkowy
Tryb ignorowania odst
öpów:
x
W tym trybie w wyraĔeniach regularnych moĔna umiesz-
czaè dowolne iloĈci odstöpów oraz komentarze. W tym trybie
mechanizmy obsäugi wyraĔeþ regularnych ignorujñ wszystkie
biaäe znaki oraz komentarze (rozpoczynajñce siö od znaku
#
i rozciñgajñce siö aĔ do koþca wiersza).
Modyfikatory trybu:
(?i)
,
(?-i)
,
(?tryb:...)
Zazwyczaj modyfikatory trybu moĔna umieszczaè bezpo-
Ĉrednio w wyraĔeniach regularnych —
(?tryb)
wäñcza wy-
brany tryb w dalszej czöĈci podwyraĔenia,
(?-tryb)
wyäñcza
podany tryb, a
(?tryb:...)
wäñcza lub wyäñcza podany tryb
w wyraĔeniu podanym miödzy dwukropkiem i nawiasem
zamykajñcym. Na przykäad
u
šywaj (?i:perla)
pasuje do
äaþcuchów
u
šywaj Perla
,
u
šywaj PerLA
i tak dalej.
Komentarze:
(?#...)
oraz
#
W trybie ignorowania odstöpów znak
#
informuje, Ĕe pozo-
staäa czöĈè wiersza stanowi komentarz. JeĈli konstrukcja ta
jest obsäugiwana, to obszar komentarza —
(?#...)
— moĔ-
na umieszczaè w dowolnym miejscu wyraĔenia regularnego
i to niezaleĔnie od uĔywanego trybu. Na przykäad w wy-
raĔeniu
.{0,80}(?#Limit d
ĪugoŁci wynosi 80 znaków)
moĔna byäo umieĈciè komentarz, dlaczego uĔyto
{0,80}
.
Obszar zapisu dos
äownego:
\Q...\E
W tym przypadku wszystkie metaznaki zapisane pomiödzy
\Q
oraz
\E
sñ traktowane w sposób dosäowny. Na przy-
käad wyraĔenie
\Q(.*)\E
ma to samo znaczenie co wy-
raĔenie
\(\.\*\)
.
Przedstawienie wyra
żeħ regularnych _ 21
Grupowanie, przechwytywanie, warunki i sterowanie
W tej czöĈci rozdziaäu zostaäa opisana skäadnia pozwalajñca na
grupowanie podwzorców, przechwytywanie dopasowanych frag-
mentów wyraĔenia, warunkowe dopasowywanie fragmentów
wyraĔenia oraz okreĈlanie, ile razy moĔe pojawiè siö okreĈlony
podwzorzec.
Nawiasy przechwytuj
ñce i grupujñce:
(...)
oraz
\1
,
\2
, …
Nawiasy speäniajñ w wyraĔeniach regularnych dwie funk-
cje: grupujñ oraz przechwytujñ. Tekst pasujñcy do podwy-
raĔenia zapisanego w nawiasach zostaje „przechwycony”
i zapamiötany, dziöki czemu moĔna z niego korzystaè
w dalszej czöĈci wyraĔenia. Pary nawiasów przechwytujñ-
cych sñ numerowane na podstawie kolejnoĈci, w jakiej sñ
zapisane ich nawiasy otwierajñce, zaczynajñc od lewej strony.
JeĈli mechanizm obsäugi wyraĔeþ regularnych obsäuguje od-
woäania wsteczne, to podczas dopasowywania wyraĔenia
moĔna siö w nim odwoäywaè do wczeĈniej dopasowanych
podwyraĔeþ; do tego celu säuĔñ symbole
\1
,
\2
i tak dalej.
Przechwycone fragmenty tekstu sñ teĔ dostöpne po zakoþ-
czeniu dopasowywania wyraĔenia regularnego, jednak spo-
soby ich odczytu zaleĔñ od konkretnej implementacji wyra-
Ĕeþ regularnych. Na przykäad wyraĔenie
\b(\w+)\b\s+\1\b
pasuje do powtórzonych säów, takich jak
hej hej
.
Nawiasy jedynie grupuj
ñce:
(?:...)
Ten rodzaj nawiasów jedynie grupuje podwyraĔenie, które
nastöpnie moĔe byè wykorzystane w jakimĈ celu, lecz nie
powoduje przechwycenia tekstu. Rozwiñzanie to jest przy-
datne ze wzglödu na efektywnoĈè i moĔliwoĈè wielokrot-
nego wykorzystania. Na przykäad
(?:futro)
odpowiada
säowu
futro
, lecz nie powoduje jego zapamiötania.
22
_ Wyra
żenia regularne. Leksykon kieszonkowy
Nazwane przechwycenia:
(?<nazwa>...)
Konstrukcja ta realizuje grupowanie i przechwycenie tekstu
pasujñcego do podanego podwyraĔenia, a jednoczeĈnie po-
zwala na póĒniejsze odwoäywanie siö do tego tekstu przy
uĔyciu nazwy. Na przykäad wyraĔenie
Temat:(?<temat>.*)
zapisuje äaþcuch znaków podany po säowie
Temat:
do grupy,
do której moĔna siö odwoäywaè przy uĔyciu nazwy
temat
.
Grupowanie atomowe:
(?>...)
Sprawia, Ĕe mechanizm wyraĔeþ regularnych nigdy nie
wykorzysta ponownie podwyraĔenia podanego w grupie,
nawet jeĈli miaäoby to sprawiè, Ĕe nie uda siö dopasowaè
caäego wyraĔenia regularnego. Na przykäad wyraĔenie
(?>[ab]*)\w\w
bödzie pasowaè do äaþcucha znaków
aabbcc
,
lecz nie do
aabbaa
.
Alternatywa:
...|...
Pozwala na sprawdzenie kilku podwyraĔeþ. Niski priorytet
alternatywy sprawia, Ĕe podwyraĔenia sñ däuĔsze, niĔ zamie-
rzano; dlatego teĔ podwyraĔenia wchodzñce w skäad alter-
natywy naleĔy zapisywaè wewnñtrz nawiasów. Na przy-
käad wyraĔenie
\b(ptak|smak)\b
pasuje do wyrazu
ptak
lub wyrazu
smak
.
Wyra
Ĕenie warunkowe:
(?(je
šeli) to | w_przeciwnym_razie)
Postaè czöĈci
je
šeli
jest zaleĔna od implementacji wyraĔeþ
regularnych, jednak zazwyczaj jest to odwoäanie do prze-
chwyconego podwyraĔenia lub przewidywanie. Z kolei
czöĈci
to
oraz
w_przeciwnym_razie
sñ wzorcami wyraĔenia
regularnego. JeĈli warunek okreĈlony przez czöĈè
je
šeli
zostanie sprawdzony, zostanie zastosowane wyraĔenie
to
,
a w przeciwnym przypadku — wyraĔenie
w_przeciwnym_
razie
. Na przykäad wyraĔenie
(<)?bom(?(1)>|ba)
pasuje do
äaþcucha
<bom>
i
bomba
.