informatyka wyrazenia regularne leksykon kieszonkowy wydanie ii tony stubblebine ebook

background image

Wydawnictwo Helion
ul. Koœciuszki 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¿liwoœci

w najpopularniejszych jêzykach programowania!

•

Chcesz poznaæ przepisy na wyra¿enia regularne?

•

Chcesz wykorzystywaæ mo¿liwoœci 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 wartoœci zmiennych,
zmianie formatu, przeprowadzaniu z³o¿onych operacji wyszukiwania oraz weryfikowaniu
poprawnoœci 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êtnoœci 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œæ!

background image

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

background image

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

background image

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

background image

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.

background image

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

background image

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

background image

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è.

background image

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,

background image

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ö

background image

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

print

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).

background image

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

background image

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'

.

background image

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.

background image

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.

background image

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

\(\.\*\)

.

background image

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.

background image

Czytaj dalej...

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

.


Wyszukiwarka

Podobne podstrony:
Wyrazenia regularne Leksykon kieszonkowy Wydanie II wyrlk2 2
informatyka excel 2007 pl leksykon kieszonkowy wydanie ii curt frye ebook
informatyka mysql leksykon kieszonkowy wydanie ii george reese ebook
informatyka sql leksykon kieszonkowy wydanie ii jonathan gennick ebook
informatyka linux leksykon kieszonkowy wydanie ii daniel j barrett ebook
C 3 0 Leksykon kieszonkowy Wydanie II cshlk2
fotografia cyfrowa leksykon kieszonkowy wydanie ii OHLLWKQZEYH6V6RN62PFHJSEXA4BDV2BMQMBPZY
Fotografia Cyfrowa Leksykon Kieszonkowy Wydanie II
Excel 2007 PL Leksykon kieszonkowy Wydanie II ex27l2

więcej podobnych podstron