Upload
wydawnictwo-helion
View
2.984
Download
10
Embed Size (px)
DESCRIPTION
Wyrażenia regularne są niezwykle potężnym mechanizmem służącym do dopasowywania i manipulowania tekstami. Choć są one dostępne w wielu nowoczesnych językach programowania, to jednak w każdym z nich posiadają one nieco inne możliwości, a subtelne różnice w ich składni sprawiają, że nie są one w pełni zgodne z wyrażeniami stosowanymi w innych językach. Wiele języków programowania implementuje wyrażenia regularne, jednak żaden z nich nie robi tego w identyczny sposób.Książka "Wyrażenia regularne. Leksykon kieszonkowy" zawiera krótką prezentację pojęć związanych z wyrażeniami regularnymi oraz omówienia ich najczęściej spotykanych implementacji dysponujących największymi możliwościami. Nie będziesz już musiał rozszyfrowywać tajemniczych lub chaotycznych materiałów informacyjnych! Niniejsza książka zawiera tabele i porady dotyczące stosowania wyrażeń regularnych w językach Perl, Java, Python, C# (i środowisku .NET), PHP, JavaScript, w bibliotece PCRE oraz kilku programach (vi, awk, egrep oraz sed).Ten leksykon można potraktować jako dopełnienie doskonałej i wyczerpującej książki poświęconej wyrażeniom regularnym – "Wyrażenia regularne", autorstwa Jeffreya E. F. Friedla. Dzięki niemu będziesz mógł szybko określić składnię oraz szczególne cechy wyrażeń regularnych w dowolnym używanym języku programowania.
Citation preview
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: [email protected]
PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£
IDZ DOIDZ DO
ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG
KATALOG KSI¥¯EKKATALOG KSI¥¯EK
TWÓJ KOSZYKTWÓJ KOSZYK
CENNIK I INFORMACJECENNIK I INFORMACJE
ZAMÓW INFORMACJEO NOWO�CIACH
ZAMÓW INFORMACJEO NOWO�CIACH
ZAMÓW CENNIKZAMÓW CENNIK
CZYTELNIACZYTELNIA
FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE
SPIS TRE�CISPIS TRE�CI
DODAJ DO KOSZYKADODAJ DO KOSZYKA
KATALOG ONLINEKATALOG ONLINE
Wyra¿enia regularne.Leksykon kieszonkowyAutor: Tony Stubblebine
T³umaczenie: Piotr Rajca
ISBN: 83-7361-075-8
Tytu³ orygina³u: Regular Expressions Pocket Reference
Format: B5, stron: 128
Wyra¿enia regularne s¹ niezwykle potê¿nym mechanizmem s³u¿¹cym do
dopasowywania i manipulowania tekstami. Choæ s¹ one dostêpne w wielu
nowoczesnych jêzykach programowania, to jednak w ka¿dym z nich posiadaj¹
one nieco inne mo¿liwo�ci, a subtelne ró¿nice w ich sk³adni sprawiaj¹, ¿e nie s¹
one w pe³ni zgodne z wyra¿eniami stosowanymi w innych jêzykach. Wiele jêzyków
programowania implementuje wyra¿enia regularne, jednak ¿aden z nich nie robi
tego w identyczny sposób.
Ksi¹¿ka „Wyra¿enia regularne. Leksykon kieszonkowy” zawiera krótk¹ prezentacjê
pojêæ zwi¹zanych z wyra¿eniami regularnymi oraz omówienia ich najczê�ciej
spotykanych implementacji dysponuj¹cych najwiêkszymi mo¿liwo�ciami. Nie bêdziesz
ju¿ musia³ rozszyfrowywaæ tajemniczych lub chaotycznych materia³ów informacyjnych!
Niniejsza ksi¹¿ka zawiera tabele i porady dotycz¹ce stosowania wyra¿eñ regularnych
w jêzykach Perl, Java, Python, C# (i �rodowisku .NET), PHP, JavaScript, w bibliotece
PCRE oraz kilku programach (vi, awk, egrep oraz sed).
Ten leksykon mo¿na potraktowaæ jako dope³nienie doskona³ej i wyczerpuj¹cej ksi¹¿ki
po�wiêconej wyra¿eniom regularnym — „Wyra¿enia regularne”, autorstwa Jeffreya E. F.
Friedla. Dziêki niemu bêdziesz móg³ szybko okre�liæ sk³adniê oraz szczególne cechy
wyra¿eñ regularnych w dowolnym u¿ywanym jêzyku programowania.
Spis treści 3
Spis treści
O książce ...................................................................................5
Przedstawienie wyrażeń regularnychoraz zagadnień dopasowywania wzorców ........................7
Metaznaki, tryby oraz konstrukcje........................................................10
Reprezentacja znaków.............................................................................10
Perl 5.8 .....................................................................................22Obsługiwane metaznaki..........................................................................22
Operatory wyrażeń regularnych ...........................................................27
Obsługa Unicode......................................................................................30
Przykłady ..................................................................................................31
Inne źródła informacji .............................................................................32
Java (java.util.regex) .............................................................33Obsługiwane metaznaki..........................................................................33
Klasy i interfejsy związane z wykorzystaniemwyrażeń regularnych ...........................................................................38
Obsługa Unicode......................................................................................44
Przykłady ..................................................................................................45
Inne źródła informacji .............................................................................47
.NET i C# .................................................................................48Obsługiwane metaznaki..........................................................................48
Klasy i interfejsy związane z wykorzystaniemwyrażeń regularnych ...........................................................................53
Obsługa Unicode......................................................................................59
Przykłady ..................................................................................................59
Inne źródła informacji .............................................................................62
Python......................................................................................62Obsługiwane metaznaki..........................................................................62
Obiekty i funkcje modułu re ..................................................................66
4 Wyrażenia regularne. Leksykon kieszonkowy
Obsługa Unicode......................................................................................71
Przykłady ..................................................................................................72
Inne źródła informacji .............................................................................73
Biblioteka PCRE....................................................................73Obsługiwane metaznaki..........................................................................79
PCRE API ..................................................................................................79
Obsługa Unicode......................................................................................83
Przykłady ..................................................................................................84
Inne źródła informacji .............................................................................88
PHP ..........................................................................................88Obsługiwane metaznaki..........................................................................88
Funkcje obsługi wyrażeń regularnych..................................................93
Przykłady ..................................................................................................96
Inne źródła informacji .............................................................................98
Edytor vi..................................................................................98Obsługiwane metaznaki..........................................................................98
Dopasowywanie wzorców ...................................................................102
Przykłady ................................................................................................103
Inne źródła informacji ...........................................................................104
JavaScript..............................................................................104Obsługiwane metaznaki........................................................................104
Metody i obiekty związane z wykorzystaniemwyrażeń regularnych .........................................................................107
Przykłady ................................................................................................111
Inne źródła informacji ...........................................................................113
Programy obsługiwane z wiersza poleceń......................113Obsługiwane metaznaki........................................................................113
Inne źródła informacji ...........................................................................119
Skorowidz .............................................................................121
Java (java.util.regex) 33
����������� ������������������������������������������������ ������� ! !!
• Wyrażenia regularne, książka Jeffreya E. F. Friedla (wydaw-nictwo Helion) szczegółowo opisuje wyrażenia regularneużywane w języku Perl (strony 203 – 302).
• perlre — to jeden z działów dokumentacji języka Perl, do-stępnych w większości jego dystrybucji.
Java (java.util.regex)W Java 1.4 obsługa wyrażeń regularnych została zaimplemen-towana w formie pakietu ������������, opracowanego przezfirmę Sun. Choć istnieją także inne pakiety obsługujące wyrażeniaregularne, przeznaczone dla wcześniejszych wersji języka, to jed-nak standardem stanie się zapewne pakiet firmy Sun. W pakiecietym wykorzystywany jest tradycyjny mechanizm dopasowywaniaNFA. Wyjaśnienie zasad działania tego mechanizmu możnaznaleźć w rozdziale pod tytułem „Przedstawienie wyrażeń regu-larnych oraz zagadnień dopasowywania wzorców”.
Obsługiwane metaznaki
Pakiet ������������ obsługuje metaznaki oraz metasekwencjeprzedstawione w tabelach od 10. do 14. Bardziej szczegółoweopisy poszczególnych metaznaków można znaleźć w części zaty-tułowanej „Metaznaki, tryby oraz konstrukcje”.
Tabela 10. Reprezentacje znaków
Sekwencja Znaczenie
� Alarm (dzwonek)
� Znak cofnięcia; ���, obsługiwany wyłącznie w klasie znaków
Znak ESC, ���
� Znak nowego wiersza, ���
34 Wyrażenia regularne. Leksykon kieszonkowy
!" ������� ! ����������� ������������������������������������������������
Znak powrotu karetki, ���
Tabela 10. Reprezentacje znaków — ciąg dalszy
Sekwencja Znaczenie
� Znak wysunięcia kartki, ���
� Znak tabulacji poziomej, ���
��������� Znak reprezentowany przez jedno-, dwu- lub trzycyfrową liczbęósemkową
����������� Znak reprezentowany przez jedno- lub dwucyfrową liczbęszesnastkową
����������� Znak reprezentowany przez czterocyfrowy kod szesnastkowyUnicode
��� Znak sterujący o podanej nazwie
Tabela 11. Klasy znaków oraz skrótowe zapisy klas
Klasa Znaczenie
����� Pojedynczy znak podany lub zawierający się w określonymzakresie
������ Pojedynczy znak, który nie został podany lub nie zawiera sięw określonym zakresie
� Dowolny znak za wyjątkiem znaku nowego wiersza
(chyba że stosowany jest tryb ������)
Znak mogący tworzyć wyrazy; ��!"�!#�!�$�
% Znak, który nie może tworzyć wyrazów; ���!"�!#�!�$�
& Cyfra; ��!��
� Dowolny znak nie będący cyfrą; ���!��
' odstęp; �( � � � ����
) Dowolny znak nie będący odstępem; ��( � � � ����
*+��� ���� �, Znak należący do określonej klasy znaków POSIX bądźwłaściwości lub bloku Unicode
-+��� ���� �, Znak, który nie należy do określonej klasy znaków POSIXani właściwości lub bloku Unicode
Java (java.util.regex) 35
����������� ������������������������������������������������ ������� ! !#
Tabela 12. Punkty zakotwiczenia i warunki zerowej długości
Sekwencja Znaczenie
� Początek łańcucha znaków lub, w trybie wielowierszowym (./��0�012),
miejsce położone bezpośrednio za znakiem nowego wiersza
� Początek łańcucha znaków, niezależnie od używanego trybudopasowywania
3 Koniec łańcucha znaków lub, w trybie wielowierszowym (./��0�012),
miejsce położone bezpośrednio przed dowolnym znakiem nowego wiersza
# Koniec łańcucha znaków lub miejsce położone przed znakiem nowegowiersza kończącym wejściowy łańcuch znaków, niezależnie od używanegotrybu dopasowywania
" Koniec łańcucha znaków, niezależnie od używanego trybu dopasowywania
� Granica słowa
� Dowolne miejsce, które nie jest granicą słowa
4 Początek aktualnego wyszukiwania
567���8 Pozytywne przewidywanie
569���8 Negatywne przewidywanie
5:7���8 Pozytywne przewidywanie wsteczne
5:9���8 Negatywne przewidywanie wsteczne
Tabela 13. Komentarze i modyfikatory trybu
Modyfikator(sekwencja)
Znaktrybu
Znaczenie
-�����/10;$�012)
& Traktuje znak �(jako jedyny znak końca wiersza
-����������� ' Kropka (�) odpowiada dowolnemu znakowi, w tym
także znakowi zakończenia wiersza
-�����./��0�012 < Metaznaki � oraz 3 pasują do miejsc położonych
tuż obok osadzonych znaków końca wiersza
-�������..21�) � Ignoruje odstępy i pozwala na umieszczaniekomentarzy w wyrażeniu regularnym
36 Wyrażenia regularne. Leksykon kieszonkowy
!$ ������� ! ����������� ������������������������������������������������
-�������)2$01)21)0�0=2
� Podczas dopasowywania nie będzie uwzględnianawielkość liter należących do kodu ASCII
Tabela 13. Komentarze i modyfikatory trybu — ciąg dalszy
Modyfikator(sekwencja)
Znaktrybu
Znaczenie
-�����/10���2$��)2
� Podczas dopasowywania nie będzie uwzględnianawielkość liter Unicode
-�������1�1$2> Tryb „kanonicznej równoważności” Unicode,w którym znak oraz sekwencja składająca sięze znaku bazowego i znaków łączących o takiejsamej reprezentacji wizualnej są traktowane jakoidentyczne
56����8 Włącza podane tryby (�&<'��) w dalszej części
podwyrażenia
56!����8 Wyłącza podane tryby (�&<'��) w dalszej części
podwyrażenia
56����?��.8 Włącza podane tryby (�&<'��) w wyrażeniu
podanym pomiędzy dwukropkiem i nawiasemzamykającym
56!����?���8 Wyłącza podane tryby (�&<'��) w wyrażeniu
podanym pomiędzy dwukropkiem i nawiasemzamykającym
@��� W trybie A� sprawia, że wszystkie znaki do
końca wiersza będą traktowane jako komentarz
Tabela 14. Grupowanie, przechwytywanie, konstrukcje warunkowei sterowanie
Sekwencja Znaczenie
5���8 Grupuje podwzorce, przechwytuje pasujące do nich łańcuchy znaków
i zapamiętuje je w metaznakach �, B, … oraz 3�, 3B, …
Zawiera tekst odpowiadający -tej grupie przechwytującej
3 W łańcuchu zamiennika zawiera tekst dopasowany do -tej grupy
przechwytującej
Java (java.util.regex) 37
����������� ������������������������������������������������ ������� ! !%
56?���8 Grupuje podwzorce, lecz nie powoduje przechwycenia i zapamiętaniapasujących do nich łańcuchów znaków
56C���8 Nie pozwala na powtórne wykorzystanie tekstu pasującego do podwzorca
Tabela 14. Grupowanie, przechwytywanie, konstrukcje warunkowei sterowanie — ciąg dalszy
Sekwencja Znaczenie
���D��� Sprawdza alternatywne podwzorce
E Dopasowuje podwzorzec 0 lub więcej razy
F Dopasowuje podwzorzec 1 lub więcej razy
6 Dopasowuje podwzorzec 1 lub 0 razy
+, Dopasowuje podwzorzec dokładnie razy
+G, Dopasowuje podwzorzec co najmniej razy
+�G�, Dopasowuje podwzorzec co najmniej � razy, jednak nie więcej niż � razy
E6 Dopasowuje 0 lub więcej powtórzeń podwzorca, przy czym wybieranajest najmniejsza możliwa liczba powtórzeń
F6 Dopasowuje 1 lub więcej powtórzeń podwzorca, przy czym wybieranajest najmniejsza możliwa liczba powtórzeń
66 Dopasowuje 0 lub 1 powtórzenie podwzorca, przy czym wybierana jestnajmniejsza możliwa liczba powtórzeń
+G,6 Dopasowuje podwzorzec co najmniej razy, przy czym wybierana jest
najmniejsza możliwa liczba powtórzeń
+�G�,6 Dopasowuje podwzorzec co najmniej � razy, jednak nie więcej niż �razy, przy czym wybierana jest najmniejsza możliwa liczba powtórzeń
EF Dopasowuje 0 lub więcej powtórzeń podwzorca, przy czym nigdy niejest realizowane nawracanie
FF Dopasowuje 1 lub więcej powtórzeń podwzorca, przy czym nigdy niejest realizowane nawracanie
6F Dopasowuje 0 lub 1 powtórzenie podwzorca, przy czym nigdy nie jestrealizowane nawracanie
+,F Dopasowuje podwzorzec co najmniej razy, przy czym nigdy nie jest
realizowane nawracanie
+G,F Dopasowuje podwzorzec co najmniej razy, przy czym nigdy nie jest
realizowane nawracanie
38 Wyrażenia regularne. Leksykon kieszonkowy
!& ������� ! ����������� ������������������������������������������������
+�G�,F Dopasowuje podwzorzec co najmniej � razy, jednak nie więcej niż �razy, przy czym nigdy nie jest realizowane nawracanie
Klasy i interfejsy związanez wykorzystaniem wyrażeń regularnych
W języku Java 1.4 wprowadzono dwie podstawowe klasy zwią-zane z obsługą wyrażeń regularnych — �������������-����oraz �������������.���H, jeden wyjątek — �������������-����)I����2��*��J� oraz nowy interfejs — �H�)K���. Ponadtofirma Sun zaktualizowała klasę )���� — aktualnie implementujeona interfejs �H�)K��� i udostępnia podstawowe metody zwią-zane z wykorzystaniem wyrażeń regularnych i dopasowywaniemwzorców. Obiekty -���� to skompilowane wyrażenia regularne,które można dopasowywać do wielu różnych łańcuchów znaków.Z kolei obiekt .���H to wynik dopasowania jednego obiektu-���� do konkretnego łańcucha znaków (lub dowolnego obiektuimplementującego interfejs �H�)K���).
Znaki odwrotnego ukośnika umieszczone w literałach znakowychdefiniujących wyrażenie regularne należy odpowiednio oznaczać(dodatkowym znakiem odwrotnego ukośnika). A zatem � (znaknowego wiersza), umieszczany w literałach łańcuchowych Javy,które mają być użyte jako wyrażenie regularne, należy zapisaćw postaci �.
java.lang.String
Opis
Nowe metody służące do dopasowywania wyrażeń regularnych.
Java (java.util.regex) 39
����������� ������������������������������������������������ ������� ! !'
Metody
�JJ���(<���H'5)����(���������������8Zwraca wartość ��, jeśli podane ��������������� odpo-wiada całemu łańcuchowi znaków.
)������('*���5)����(���������������8Zwraca tablicę łańcuchów znaków, oddzielających od sie-bie kolejne fragmenty łańcucha odpowiadające podanemu�����������������.
)������('*���5)����(���������������G(���(�����8Zwraca tablicę łańcuchów znaków, oddzielających od siebiepierwsze �����!� fragmentów łańcucha odpowiadającychpodanemu �����������������.
)����(*���L�'�5)����(���������������G()����(������8Zastępuje podłańcuch odpowiadający podanemu ������������������ ���������.
)����(*������5)����(���������������G()����(������8Zastępuje wszystkie podłańcuchy odpowiadające podanemu����������������� ���������.
java.util.regex.Pattern extends(�����
implements()����"���
Opis
Reprezentuje wzorzec wyrażenia regularnego.
Metody
'�����(-����(�J<*��5)����(���������������8Tworzy nowy obiekt -���� na podstawie podanego ������������������.
40 Wyrażenia regularne. Leksykon kieszonkowy
" ������� ! ����������� ������������������������������������������������
'�����(-����(�J<*��5)����(���������������G(���(�����8Tworzy nowy obiekt -���� na podstawie podanego ������������������ i argumentu �����, którego wartość sta-nowią modyfikatory trybów połączone ze sobą bitowymoperatorem �M.
���(����'58Zwraca modyfikatory trybu danego obiektu -����.
.���H(<���H5�H�)K���(���������������8Tworzy obiekt .���H, który umożliwi dopasowanie tego(�H�') obiektu -���� do podanego ������������������.
'�����(�JJ���(<���H'5)����(���������������G(�H�)K�������������������8
Zwraca wartość ��, jeśli podane ��������������� od-powiada całemu łańcuchowi przekazanemu jako ����������������.
)����(*����58Zwraca wyrażenie regularne użyte do utworzenia danegoobiektu -����.
)������('*���5�H�)K���(���������������8Zwraca tablicę łańcuchów znaków, które rozdzielają w poda-nym ����������������� kolejne wystąpienia wyrażenia regu-larnego reprezentowanego przez dany obiekt -����.
)������('*���5�H�)K���(���������������G(���(�����8Zwraca tablicę łańcuchów znaków, które rozdzielają w poda-nym ����������������� �����!�(wystąpień wyrażenia regu-larnego reprezentowanego przez dany obiekt -����.
Java (java.util.regex) 41
����������� ������������������������������������������������ ������� ! "�
java.util.regex.Matcher extends(�����
Opis
Reprezentuje mechanizm dopasowujący wyrażenia regularne orazwyniki dopasowania wyrażenia.
Metody
.���H(�**�&M*���<��5)��������(��G()����(������8Dołącza podłańcuch poprzedzający dopasowanie oraz ������� do bufora znakowego, określonego przy użyciu argu-mentu ��.
)��������(�**�&����5)��������(��8Dołącza podłańcuch umieszczony za dopasowaniem do bu-fora znakowego, określonego przy użyciu argumentu ��.
���(�&58Indeks pierwszego znaku za końcem dopasowania.
���(�&5���(�����8Indeks pierwszego znaku znajdującego się za przechwy-coną �����.
�JJ���(���&58Odnajduje kolejny fragment łańcucha pasujący do wyrażeniaregularnego.
�JJ���(���&5���(�������8Odnajduje kolejny fragment łańcucha pasujący do wyrażeniaregularnego, położony za znakiem o indeksie określonymjako �������.
)����(�J�*58Tekst odpowiadający wyrażeniu regularnemu reprezento-wanemu przez dany obiekt -����.
42 Wyrażenia regularne. Leksykon kieszonkowy
"� ������� ! ����������� ������������������������������������������������
)����(�J�*5���(�����8Tekst przechwycony przez grupę przechwytującą, określonąprzez argument �����.
���(�J�*�J���58Liczba grup przechwytujących zdefiniowanych w wyraże-niu reprezentowanym przez obiekt -����.
�JJ���(�JJN�����58Zwraca ��, jeśli dopasowanie znajduje się na samym po-czątku wejściowego łańcucha znaków.
�JJ���(<���H'58Zwraca ��, jeśli -���� odpowiada całemu wejściowemułańcuchowi znaków.
-����(*����58Zwraca obiekt -����, wykorzystywany w danym obiekcie.���H.
)����(*������5)����(������8Zastępuje każde dopasowanie podanym ���������.
)����(*���L�'�5)����(������8Zastępuje pierwsze dopasowanie podanym ���������.
.���H('�58Przywraca początkowy stan mechanizmu dopasowywania,dzięki czemu kolejna operacja dopasowania rozpocznie sięna samym początku wejściowego łańcucha znaków.
.���H('�5�H�)K���(���������������8Przywraca początkowy stan mechanizmu dopasowywaniai określa, że ma on działać na podanym �����������������.
���('���58Indeks pierwszego dopasowanego znaku.
Java (java.util.regex) 43
����������� ������������������������������������������������ ������� ! "!
���('���5���(�����8Indeks pierwszego znaku dopasowanego w grupie prze-chwytującej, określonej przy użyciu argumentu �����.
java.util.regex.PatternSyntaxExceptionimplements()����"���
Opis
Te wyjątki są zgłaszane w celu poinformowania o pojawieniu siębłędów składniowych we wzorcu wyrażenia regularnego.
Metody
-����)I����2��*��J�5)����(&'�G()����(��G(���(��&�8Tworzy nowy egzemplarz tej klasy.
)����(���'��*��J�58Zwraca opis błędu.
���(��0�&�58Zwraca indeks wystąpienia błędu.
)����(��.''��58Zwraca wielowierszowy komunikat o błędzie, zawierający jegoopis, indeks, wzorzec wyrażenia regularnego oraz informacjena temat położenia miejsca wystąpienia błędu we wzorcu.
)����(��-����58Zwraca wzorzec wyrażenia regularnego, które zgłosiłowyjątek.
44 Wyrażenia regularne. Leksykon kieszonkowy
"" ������� ! ����������� ������������������������������������������������
java.lang.CharSequence Interfejs
implementowany przez:�H�����, )���� i )��������
Opis
Definiuje interfejs umożliwiający dostęp tylko do odczytu, dziękiktóremu wzorce wyrażeń regularnych można zastosować do se-kwencji znaków.
Metody
�H�(�H���5���(��&N'8Zwraca znak znajdujący się w miejscu określonym przez� ���, przy czym indeks pierwszego znaku ma wartość 0.
���(����H58Zwraca liczbę znaków w sekwencji.
�H�)K���('��)K���5���(*J�"��NG(���(NJ���8Zwraca sekwencję zawierającą znak umieszczony w miejscuo indeksie ������� i kończącą się bezpośrednio przed zna-kiem o indeksie �����.
)����(�J)����58
Zwraca obiekt )����, zawierający reprezentację danej sekwen-cji.