Wyrażenia regularne to niezwykle skuteczny mechanizm przetwarzania tekstów i innych danych. Ci, którzy do tej pory nie zetknęli się z tym pojęciem, odkryją dzięki tej książce nowe, potężne narzędzia, pozwalające w pełni zapanować nad danymi. Prezentowana tu wiedza jest tak szczegółowa i obszerna, że nawet komputerowi weterani znajdą coś nowego dla siebie.
Umiejętne stosowanie wyrażeń regularnych pozwala radykalnie uprościć przetwarzanie wszelkiego rodzaju informacji, poczynając od poczty elektronicznej, poprzez pliki dzienników aż do dokumentów tekstowych. Mechanizm ten odgrywa niezwykle ważną rolę w programowaniu skryptów CGI, często przetwarzających rozmaite dane tekstowe.
Wyrażenia regularne nie funkcjonują samodzielnie. Oprócz doskonale wszystkim znanego programu grep, wchodzą one w skład takich narzędzi programisty, jak:
- translatory języków skryptowych (m.in. Perl, Tcl, awk i Python),
- edytory tekstów (Emacs, vi, Nisus Writer i inne),
- środowiska programowania (m.in. Delphi i Visual C++)
- inne wyspecjalizowane narzędzia (np. lex, Expert czy sed).
Korzystanie z wyrażeń regularnych wymaga nie tylko wiedzy teoretycznej, ale również znajomości pewnych niuansów. Jeffrey Friedl konsekwentnie prowadzi nas przez kolejne etapy tworzenia konstrukcji, które dokładnie zrealizują wszystkie postawione przed nimi zadania.
Wyrażenia regularne nie istnieją oczywiście same dla siebie. Na stronach książki przedstawiono liczne przykłady wykorzystujących je narzędzi, a także wiele praktycznych przykładów. Szczególnie dużo uwagi poświęcono językowi Perl, wyposażonemu w bogaty zestaw funkcji przeznaczonych specjalnie do obsługi wyrażeń regularnych.
Zawarte w tej książce porady pozwolą Czytelnikom uniknąć wszelkich pułapek i skutecznie wykorzystać możliwości wyrażeń regularnych.
"Książka była dla mnie tyleż przyjemna, co pouczająca, nawet w kwestiach związanych z Perlem"
Tom Christiansen, współautor książki Perl. Programowanie
Spis treści
Przedmowa (9)
1. Wprowadzenie do wyrażeń regularnych (17)
- Rozwiązywanie prawdziwych problemów (18)
- Wyrażenia regularne jako język (19)
- Analogia do nazw plików (19)
- Analogia do języka (20)
- Myślenie wyrażeniami regularnymi (21)
- Przeszukiwanie plików tekstowych - egrep (22)
- Metaznaki programu egrep (23)
- Początek i koniec wiersza (23)
- Klasy znaków (23)
- Kropka, czyli dowolny znak (26)
- Alternacja (27)
- Granice słów (28)
- W skrócie (29)
- Elementy opcjonalne (30)
- Inne kwantyfikatory - powtarzanie (31)
- Ignorowanie wielkości znaków (33)
- Nawiasy i odwołania wsteczne (33)
- Szybki unik (35)
- Ponad podstawy (35)
- Różnorodność językowa (35)
- Cel tworzenia wyrażenia regularnego (35)
- Jeszcze kilka przykładów (36)
- Terminologia wyrażeń regularnych (38)
- Podwyższanie kwalifikacji (40)
- Podsumowanie (42)
- Uwagi osobiste (43)
2. Przykłady wyrażeń regularnych (45)
- O przykładach (45)
- Perl - krótkie wprowadzenie (46)
- Wyszukiwanie tekstu za pomocą wyrażeń regularnych (48)
- Przykład bliższy rzeczywistości (49)
- Skutki uboczne udanego dopasowania (50)
- Przeplatanie wyrażeń regularnych (53)
- Chwila odpoczynku (56)
- Modyfikowanie znalezionego tekstu (57)
- Edycja zautomatyzowana (60)
- Proste przetwarzanie wiadomości e-mailowych (61)
- I znów powtarzające się słowa (66)
3. Przegląd funkcji i odmian wyrażeń regularnych (71)
- Spacerkiem po krainie wyrażeń regularnych (72)
- Świat według grepa (72)
- Czas wszystko zmienia (73)
- Najkrótszy przegląd (74)
- POSIX (76)
- "Otoczka" wyrażeń regularnych (77)
- Identyfikacja wyrażenia regularnego (78)
- Operacje na dopasowanym tekście (78)
- Inne przykłady (79)
- "Otoczka" wyrażeń regularnych - podsumowanie (81)
- Silniki a błyszczący lakier (82)
- Lakier (82)
- Silnik i kierowca (82)
- Typowe metaznaki (82)
- Skróty znakowe (83)
- Łańcuchy jako wyrażenia regularne (86)
- Skrótowy zapis klas, kropka i klasy znaków (88)
- Zakotwiczanie (92)
- Grupowanie i wydobywanie informacji (94)
- Kwantyfikatory (94)
- Alternacja (95)
- Przewodnik po dalszych rozdziałach (95)
- Informacje specyficzne dla konkretnego narzędzia (96)
4. Mechanika przetwarzania wyrażeń (97)
- Przekręcamy klucz w stacyjce (97)
- Dwa typy silników (97)
- Nowe standardy (98)
- Typy mechanizmów wyrażeń regularnych (98)
- Kilka dodatkowych pytań (100)
- Podstawy dopasowywania (100)
- O przykładach (100)
- Zasada 1. Najwcześniejsze dopasowanie wygrywa (101)
- Skrzynia biegów (102)
- Części silnika (102)
- Zasada 2. Niektóre metaznaki są "zachłanne" (103)
- Sterowanie wyrażeniem a sterowanie tekstem (108)
- Mechanizm NFA - sterowanie wyrażeniem (108)
- Mechanizm DFA - sterowanie tekstem (109)
- Wyjaśnienie "zagadki istnienia" (110)
- Wycofywanie (111)
- "Krucha" analogia (111)
- Dwie istotne sprawy dotyczące wycofywania (112)
- Zachowane stany (113)
- Wycofywanie a zachłanność (114)
- Więcej o zachłanności (117)
- Problemy z zachłannością (117)
- "Cudzysłowy" wieloznakowe (118)
- Lenistwo? (118)
- Zachłanność zawsze sprzyja dopasowaniu (119)
- Czy alternacja jest zachłanna? (120)
- Sposoby wykorzystania alternacji niezachłannej (121)
- Alternatywa zachłanna z perspektywy (123)
- Klasy znaków a alternacja (123)
- NFA, DFA i POSIX (123)
- "Najdłuższe najbardziej z lewej" (123)
- POSIX a zasada "najdłuższe najbardziej z lewej" (125)
- Szybkość i wydajność (126)
- Porównanie mechanizmów DFA i NFA (126)
- Techniki tworzenia wyrażeń regularnych (128)
- O czym należy pamiętać (129)
- Warto być konkretnym (130)
- Trudności i niemożliwości (133)
- Uwaga na niepożądane dopasowania (134)
- Dopasowanie ograniczonego tekstu (136)
- Wiedza o przetwarzanych danych (139)
- Dalsze przykłady zachłanności (139)
- Podsumowanie (142)
- Podsumowanie mechaniki dopasowania (142)
- Praktyczne efekty działania mechanizmów dopasowania wzorca (143)
5. Dopracowywanie wyrażeń regularnych (145)
- Przykład otrzeźwiający (146)
- Prosta zmiana - najlepszą chorągiew posyłamy przodem (146)
- Krok dalej: znalezienie źródła zachłanności (147)
- Twarda rzeczywistość (149)
- O wycofywaniu ogólnie (151)
- POSIX NFA - więcej pracy (152)
- Gdy nie ma dopasowania (152)
- Dążenie do precyzji (153)
- Alternacja może kosztować (154)
- Silne prowadzenie (155)
- Wpływ nawiasów okrągłych (155)
- Optymalizacja wewnętrzna (159)
- Rozpoznawanie pierwszego znaku (159)
- Sprawdzanie obecności stałego fragmentu tekstu (160)
- Proste powtarzanie (160)
- Niepotrzebne małe kwantyfikatory (162)
- Rozpoznanie długości (162)
- Rozpoznanie dopasowania (162)
- Rozpoznanie potrzeb (162)
- Zakotwiczenia łańcucha lub wiersza (162)
- Buforowanie postaci skompilowanej (163)
- Identyfikacja mechanizmu (165)
- NFA czy DFA? (165)
- NFA tradycyjny czy posiksowy? (166)
- Rozwijanie pętli (166)
- Metoda pierwsza: tworzenie wyrażenia na podstawie doświadczenia (167)
- Faktyczny wzór na "rozwinięcie pętli" (168)
- Metoda druga: pogląd z góry (171)
- Metoda trzecia: nazwa hosta internetowego w cudzysłowach (171)
- Obserwacje (172)
- Rozwijanie komentarzy w C (173)
- Wyrażeniowy zawrót głowy (173)
- Sposób naiwny (173)
- Rozwijanie pętli w języku C (176)
- Swobodne wyrażenie (177)
- Dopasowanie wspomagane (177)
- Czy można jeszcze szybciej? (178)
- Opakowanie (180)
- Nic nie zastąpi myślenia (181)
- Różne oblicza optymalizacji (181)
6. O konkretnych narzędziach (185)
- Pytania, które powinny się pojawić (185)
- Pozornie prosty grep... (185)
- W tym rozdziale (187)
- Język awk (187)
- Różnice pomiędzy odmianami wyrażeń regularnych w awku (188)
- Funkcje i operatory wyrażeń regularnych w awku (190)
- Tcl (192)
- Argumenty wyrażeń regularnych (192)
- Korzystanie z wyrażeń regularnych Tcl-a (193)
- Optymalizacja wyrażeń w języku Tcl (195)
- GNU Emacs (195)
- Łańcuchy Emacsa jako wyrażenia regularne (196)
- Emacsowa odmiana wyrażeń regularnych (197)
- Wyniki dopasowania w Emacsie (199)
- Pomiar wydajności w Emacsie (200)
- Optymalizacja wyrażeń regularnych w Emacsie (201)
7. Wyrażenia regularne Perla (203)
- Metoda Perla (204)
- Wyrażenia regularne jako składnik języka (205)
- Największa siła Perla (206)
- Największa słabość Perla (207)
- Perl a problem jajka i kury (207)
- Przykład wprowadzający: analiza tekstu w formacie CSV (208)
- Wyrażenia regularne a metoda Perla (210)
- Perl bez tajemnic (211)
- "Perlizmy" związane z wyrażeniami regularnymi (212)
- Kontekst wyrażenia regularnego (213)
- Zasięg dynamiczny a wynik dopasowania (214)
- Zmienne specjalne po dopasowaniu (219)
- "Przetwarzanie cudzysłowowe" i interpolacja zmiennych (221)
- Perlowa odmiana wyrażeń regularnych (226)
- Kwantyfikatory zachłanne i leniwe (226)
- Grupowanie (228)
- Punkty zakotwiczenia łańcucha (233)
- Zakotwiczenie poprzedniego dopasowania (237)
- Punkty zakotwiczenia słów (241)
- Wygodne skróty i inne sposoby notacji (242)
- Klasy znaków (244)
- Prawdziwe kłamstwa, czyli modyfikacja z użyciem symbolu \Q i znaków pokrewnych (246)
- Operator dopasowania (247)
- Ograniczniki argumentu dopasowania (247)
- Modyfikatory dopasowania (249)
- Określanie argumentu docelowego (250)
- Inne efekty uboczne operatora dopasowania (251)
- Wartość zwracana przez operator dopasowania (252)
- Czynniki zewnętrzne wpływające na operator dopasowania (254)
- Operator podstawiania (255)
- Argument podstawienia (255)
- Modyfikator /e (256)
- Kontekst i wartość zwracana (258)
- Użycie modyfikatora /g w wyrażeniu, które może dopasować "nic" (258)
- Operator split (259)
- Podstawowe działanie operatora split (259)
- Zaawansowane działanie operatora split (260)
- Zaawansowany argument dopasowania w split (261)
- Operator split w kontekście skalarnym (263)
- Argument dopasowania operatora split a nawiasy przechwytujące (263)
- Aspekty wydajności (264)
- "Jest na to wiele sposobów" (265)
- Kompilacja wyrażenia, modyfikator /o i wydajność (266)
- Nietowarzyska zmienna $& i spółka (271)
- Spadek wydajności wywołany modyfikatorem /i (277)
- Aspekty wydajności związane z podstawianiem (279)
- Testowanie (281)
- Usuwanie błędów wyrażenia regularnego (282)
- Funkcja study (284)
- Składamy wszystkie klocki (286)
- Usuwanie końcowych i początkowych białych znaków (287)
- Dodawanie przecinków do liczb (288)
- Usuwanie komentarzy z kodu w języku C (288)
- Dopasowanie adresu poczty elektronicznej (289)
- Kilka słów na koniec (299)
- Uwagi na temat Perla4 (300)
A Informacje dostępne w sieci (303)
- Informacje ogólne (303)
- Rzemiosło wyrażeń regularnych (303)
- O'Reilly & Associates (303)
- Wirtualna biblioteka oprogramowania OAK (304)
- Archiwum GNU (304)
- Yahoo! (304)
- Inne adresy (304)
- Awk (304)
- Pakiety biblioteczne dla języka C (304)
- Klasa wyrażeń regularnych Javy (304)
- Egrep (305)
- Emacs (305)
- Perl (305)
- Python (305)
- Tcl (305)
B Program do obsługi adresów e-mail (307)
Spis tabel (311)
O Autorze (313)
Skorowidz (315)

