Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00255 007754 10468026 na godz. na dobę w sumie
Wyrażenia regularne. Leksykon kieszonkowy. Wydanie II - książka
Wyrażenia regularne. Leksykon kieszonkowy. Wydanie II - książka
Autor: Liczba stron: 160
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-1392-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> techniki programowania
Porównaj ceny (książka, ebook, audiobook).

Poznaj wyrażenia regularne, aby wykorzystać moc ich możliwości
w najpopularniejszych 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.

Wyrażenia regularne to nieocenione narzędzia w pracy programisty
-- nie możesz się bez nich obejść!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

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(cid:230) moc ich mo¿liwo(cid:156)ci w najpopularniejszych jŒzykach programowania! (cid:149) Chcesz pozna(cid:230) przepisy na wyra¿enia regularne? (cid:149) Chcesz wykorzystywa(cid:230) mo¿liwo(cid:156)ci Unicode w jŒzyku Ruby, Java, Perl, PHP, Pyton, C oraz .NET? (cid:149) Chcesz wiedzie(cid:230), jak stosowa(cid:230) wyra¿enia regularne zaimplementowane w r(cid:243)¿nych jŒzykach programowania? Wyra¿enia regularne s„ narzŒdziem umo¿liwiaj„cym analizŒ i modyfikowanie tekstu przez dopasowywanie wzorc(cid:243)w. S„ one ‡aæcuchem znak(cid:243)w zawieraj„cym kombinacjŒ normalnych znak(cid:243)w oraz specjalnych metaznak(cid:243)w i metasekwencji, a dopasowywanie wzorc(cid:243)w polega na odszukaniu fragmentu ‡aæcucha opisywanego przez wyra¿enie regularne. Wyra¿enia te znajduj„ zastosowanie przy sprawdzaniu warto(cid:156)ci zmiennych, zmianie formatu, przeprowadzaniu z‡o¿onych operacji wyszukiwania oraz weryfikowaniu poprawno(cid:156)ci danych tekstowych. Ksi„¿ka (cid:132)Wyra¿enia regularne. Leksykon kieszonkowy(cid:148) stanowi podrŒczny niezbŒdnik dla wszystkich pisz„cych programy przetwarzaj„ce teksty. Opr(cid:243)cz zagadnieæ podstawowych, takich jak sk‡adnia wyra¿eæ regularnych oraz operacje, w kt(cid:243)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(cid:243)wnie¿ niezbŒdne umiejŒtno(cid:156)ci praktyczne (cid:150) miŒdzy innymi dowiesz siŒ, jak wykorzysta(cid:230) znajomo(cid:156)(cid:230) wyra¿eæ regularnych we wszystkich (cid:156)rodowiskach. (cid:149) Metaznaki, tryby oraz konstrukcje (cid:149) Reprezentacja i klasy znak(cid:243)w (cid:149) Komentarze i modyfikatory tryb(cid:243)w (cid:149) NarzŒdzia obs‡ugi wyra¿eæ regularnych w jŒzyku Ruby oraz na serwerze WWW Apache (cid:149) Operatory wyra¿eæ regularnych w jŒzyku Perl 5.8 (cid:149) Obiekty i metody do obs‡ugi wyra¿eæ regularnych w jŒzyku JavaScript (cid:149) Funkcje obs‡ugi wyra¿eæ regularnych w jŒzyku PHP i edytorze vi (cid:149) Obiekty i funkcje wyra¿eæ regularnych w jŒzyku Pyton (cid:149) Programy obs‡ugiwane z wiersza poleceæ Wyra¿enia regularne to nieocenione narzŒdzia w pracy programisty (cid:150) nie mo¿esz siŒ bez nich obej(cid:156)(cid:230)! Wydawnictwo Helion ul. Ko(cid:156)ciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl Spis treści O książce ............................................................................................. 8 Przedstawienie wyrażeń regularnych oraz zagadnień dopasowywania wzorców ........................................9 12 Metaznaki, tryby oraz konstrukcje Obsługa Unicode 23 Przepisy na wyrażenia regularne ................................................... 24 Przepisy 24 Perl 5.8 ...............................................................................................27 28 Obsługiwane metaznaki Operatory wyrażeń regularnych 34 37 Obsługa Unicode 38 Przykłady 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 Obsługa Unicode Przykłady Inne źródła informacji 45 54 54 56 3 .NET i C# .............................................................................................57 Obsługiwane metaznaki 57 Klasy i interfejsy związane z wykorzystaniem wyrażeń regularnych Obsługa Unicode Przykłady Inne źródła informacji 62 68 69 71 PHP ..................................................................................................... 71 71 Obsługiwane metaznaki 76 Funkcje obsługi wyrażeń regularnych Przykłady 80 81 Inne źródła informacji Python ................................................................................................81 Obsługiwane metaznaki 82 86 Obiekty i funkcje modułu re 91 Obsługa Unicode 91 Przykłady Inne źródła informacji 92 Ruby .................................................................................................. 93 93 Obsługiwane metaznaki 97 Interfejs obiektowy Obsługa Unicode 104 105 Przykłady JavaScript .........................................................................................106 Obsługiwane metaznaki 106 Metody i obiekty związane z wykorzystaniem wyrażeń regularnych Przykłady Inne źródła informacji 109 113 115 4 | Wyrażenia regularne. Leksykon kieszonkowy Biblioteka PCRE ............................................................................... 115 116 Obsługiwane metaznaki PCRE API 122 127 Obsługa Unicode 127 Przykłady Inne źródła informacji 130 Serwer WWW Apache .................................................................... 131 131 Obsługiwane metaznaki 135 RewriteRule 138 Dyrektywy dopasowywania Przykłady 139 Edytor vi ...........................................................................................140 140 Obsługiwane metaznaki Dopasowywanie wzorców 144 145 Przykłady Inne źródła informacji 146 Programy obsługiwane z wiersza poleceń ...................................146 Obsługiwane metaznaki 147 152 Inne źródła informacji Skorowidz ........................................................................................153 Spis treści | 5 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 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. Przedstawienie wyrażeń regularnych Przedstawienie wyrażeń regularnych | 9 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 10 | Wyrażenia regularne. Leksykon kieszonkowy 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 Przedstawienie wyrażeń regularnych | 11 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ć. 12 | Wyrażenia regularne. Leksykon kieszonkowy 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 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 , 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)  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 1512 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 x0Dx0A 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, Przedstawienie wyrażeń regularnych | 13 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ę 14 | Wyrażenia regularne. Leksykon kieszonkowy (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 alnum alpha blank cntrl digit graph lower print punct space upper xdigit Znaczenie Litery i znaki Litery Jedynie odstęp lub znak tabulacji Znaki sterujące Cyfry (dziesiętnego systemu liczbowego) Znaki drukowalne bez odstępu Małe litery Znaki drukowalne wraz ze znakiem odstępu Znaki drukowalne z wyłączeniem liter i cyfr Odstępy Duże litery 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). Przedstawienie wyrażeń regularnych | 15 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ść p{L} p{Ll} p{Lm} p{Lo} p{Lt} p{Lu} p{C} p{Cc} p{Cf} p{Cn} p{Co} p{Cs} p{M} p{Mc} p{Me} p{Mn} p{N} p{Nd} p{Nl} Znaczenie Litery Małe litery Litery modyfikatorów Inne litery. Nie mają one wielkości ani nie są uznawane za modyfikatory Litery tytułowe Wielkie litery Kody sterujące oraz znaki, które nie należą do innych kategorii Znaki sterujące kodów ASCII oraz Latin-1 Niewidoczne znaki formatujące Nieprzypisane punkty kodu Do zastosowań prywatnych, na przykład logo firmy Znaki zastępujące Znaczniki przeznaczone do łączenia ze znakami bazowymi, na przykład akcenty Znaki modyfikujące, wymagające odrębnego miejsca. Przykładem mogą tu być „znaki samogłosek” Znaki otaczające inne znaki, na przykład okręgi, kwadraty oraz romby Znaki modyfikujące inne znaki, na przykład akcenty bądź też znaki przegłosu Znaki liczbowe Liczby dziesiętne w różnych pismach Litery będące cyframi, na przykład cyfry rzymskie 16 | Wyrażenia regularne. Leksykon kieszonkowy Tabela 2. Standardowe właściwości Unicode (ciąg dalszy) Właściwość p{No} p{P} p{Pc} p{Pd} p{Pe} p{Pi} p{Pf} p{Po} p{Ps} p{S} p{Sc} p{Sk} p{Sm} p{So} p{Z} p{Zl} p{Zp} p{Zs} Znaczenie Indeksy górne i dolne, symbole oraz inne znaki reprezentujące liczby, które jednak nie są cyframi Znaki przestankowe Łączące znaki przestankowe, na przykład znak podkreślenia Kreski i łączniki Zamykające znaki przestankowe, dopełniające znaki reprezentowane przez p{Ps} Początkowe znaki przestankowe, takie jak cudzysłów otwierający Końcowe znaki przestankowe, takie jak cudzysłów zamykający Inne znaki przestankowe Otwierające znaki przestankowe, na przykład nawias otwierający Symbole Waluty Znaki łączące, reprezentowane jako niezależne znaki Symbole matematyczne Inne symbole Znaki oddzielające, które nie posiadają żadnej widocznej reprezentacji Separatory wierszy Separatory akapitów 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 . Przedstawienie wyrażeń regularnych | 17 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 Metaznak $ pasuje do końca łańcucha znaków. W sytuacjach, gdy dostępny jest metaznak , 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, , 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  określa miejsce, w którym znajduje się granica słowa, a metaznak B — miejsce, w którym granicy słowa nie ma. 18 | Wyrażenia regularne. Leksykon kieszonkowy 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. Przedstawienie wyrażeń regularnych | 19 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 (.*). 20 | Wyrażenia regularne. Leksykon kieszonkowy 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 (w+)s+1 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. Przedstawienie wyrażeń regularnych | 21 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]*)ww 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 (ptak|smak) 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. 22 | Wyrażenia regularne. Leksykon kieszonkowy Kwantyfikatory zachłanne: *, +, ?, {liczba, liczba} Kwantyfikatory zachłanne określają, ile razy może zostać zastosowana dana konstrukcja. Dana konstrukcja jest za- zwyczaj wykorzystywana maksymalną liczbę razy, jednak kwantyfikatory mogą także ograniczyć liczbę jej powtó- rzeń, jeśli dzięki temu uda się dopasować całe wyrażenie regularne. Na przykład wyrażenie (ab)+ pasuje do łańcucha abababababab składającego się z dowolnej liczby powtórzeń łańcucha ab. Kwantyfikatory leniwe: *?, +?, ??, {liczba, liczba}? Kwantyfikatory tego typu określają, ile razy dana konstruk- cja może zostać zastosowana. Niemniej jednak, w odróżnie- niu od kwantyfikatorów zachłannych, konstrukcje są naj- częściej dopasowywane minimalną liczbę razy. Na przykład wyrażenie (an)+? pasuje jedynie do fragmentu an słowa banana. Kwantyfikatory własnościowe: *+, ++, ?+, {liczba, liczba}+ Kwantyfikatory własnościowe działają podobnie jak kwanty- fikatory zachłanne, z tą różnicą, iż „blokują” fragmenty łań- cucha wejściowego, które udało im się dopasować, i nie pozwalają na późniejsze cofanie się i dzielenie tych fragmen- tów. Na przykład wyrażenie (ab)++ab nie będzie pasować do łańcucha znaków abababab. Obsługa Unicode Unicode to zbiór znaków, w którym wszystkim znakom wystę- pującym we wszystkich językach świata przypisane są unikalne numery. Ze względu na dużą ilość występujących znaków w Uni- code każdy znak musi być reprezentowany przez więcej niż je- den bajt. Niektóre implementacje wyrażeń regularnych nie rozpo- znają znaków Unicode, gdyż oczekują jednobajtowych znaków kodu ASCII. Podstawowa obsługa Unicode może zatem polegać na Przedstawienie wyrażeń regularnych | 23 samej możliwości dopasowania wyrażenia składającego się ze zna- ków Unicode. Bardziej zaawansowana obsługa może obejmować rozpoznawanie klas znaków oraz innych konstrukcji zawierają- cych znaki ze wszystkich języków uwzględnianych w Unicode. Na przykład w może odpowiadać zarówno literze è, jak i e. Przepisy na wyrażenia regularne W tej części rozdziału zamieszczone zostały proste przykła- dy wzorców wyrażeń regularnych. Być może konieczne będzie wprowadzenie w nich pewnych modyfikacji, by dostosować je do konkretnych potrzeb. Wraz z każdym wyrażeniem prezentowane są także łańcuchy znaków, które do niego pasują, oraz takie, które nie pasują. Dzię- ki temu Czytelnikowi łatwiej będzie określić, jakie zmiany należy wprowadzić w wyrażeniu, by dostosować je do własnych potrzeb. Wyrażenia są zapisane w sposób charakterystyczny dla języ- ka Perl: /wzorzec/tryb s/wzorzec/zamiennik/tryb Przepisy Usuwanie odstępów na początku i końcu łańcucha s/^s+// s/s+$// Pasuje do: bar kod , bar Nie pasuje do: bar kod 24 | Wyrażenia regularne. Leksykon kieszonkowy
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Wyrażenia regularne. Leksykon kieszonkowy. Wydanie II
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: