Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00601 008434 10739877 na godz. na dobę w sumie
Wyrażenia regularne. Wprowadzenie - książka
Wyrażenia regularne. Wprowadzenie - książka
Autor: Liczba stron: 168
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-6868-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> techniki programowania
Porównaj ceny (książka, ebook, audiobook).

Wyrażenia regularne to wzorce, które pozwalają opisać łańcuchy znaków. Brzmi to groźnie, wygląda jeszcze gorzej, ale każdy programista prędzej czy później się z nimi spotka i... doceni ich potęgę! Ciężko sobie wyobrazić wyszukiwanie, zastępowanie oraz sprawdzanie poprawności danych bez wykorzystania potencjału wyrażeń regularnych. Czas poświęcony na ich opanowanie zwróci się błyskawicznie i z nawiązką!

Ta wspaniała książka wprowadzi Cię w świat wyrażeń regularnych szybko i bezboleśnie. Już za chwilę wykorzystasz podstawowe elementy wyrażeń, a każdy kolejny rozdział dostarczy Ci coraz bardziej zaawansowanych narzędzi. W trakcie lektury nauczysz się korzystać z granic, klas znaków, grup i odniesień. Ponadto dowiesz się, jak wykorzystać możliwości Perla w zakresie transformacji tekstów. Książka ta jest wyjątkowym podręcznikiem, który musi znaleźć się na półce każdego programisty!

Sprawdź już teraz:

Zaoszczędź czas dzięki wyrażeniom regularnym!

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

Darmowy fragment publikacji:

Tytuł oryginału: Introducing Regular Expressions Tłumaczenie: Robert Górczyński ISBN: 978-83-246-6868-7 © 2013 Helion S.A. Authorized Polish translation of the English edition Introducing Regular Expressions, ISBN 9781449392680 © Michael Fitzgerald. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/wyrawp Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność SPIS TREĻCI Wprowadzenie ...........................................................................................7 1. Czym sé wyraŜenia regularne? ..................................................... 13 14 Poznaj aplikacjö RegexPal Dopasowanie numeru telefonu w formacie stosowanym w Ameryce Póänocnej Dopasowanie cyfr za pomocñ klasy znaków UĔywanie znaków skrótów Dopasowanie dowolnego znaku Grupy przechwytywania i odwoäania wsteczne UĔywanie kwantyfikatorów UĔywanie dosäownych znaków Przykäady aplikacji Czego dowiedziaäeĈ siö z rozdziaäu 1.? Informacje techniczne 16 17 18 19 19 20 21 23 25 26 2. Proste dopasowanie wzorca .........................................................27 29 30 32 32 35 37 Dopasowanie dosäownego ciñgu tekstowego Dopasowanie cyfr Dopasowanie znaków innych niĔ cyfry Dopasowanie säów i znaków niebödñcych säowami Dopasowanie znaku niewidocznego Dopasowanie dowolnego znaku, po raz kolejny 3 Poleć książkęKup książkę Oznaczanie tekstu Czego dowiedziaäeĈ siö z rozdziaäu 2.? Informacje techniczne 39 43 44 3. Granice ...........................................................................................47 47 49 52 53 54 58 59 Poczñtek i koniec wiersza Granice säowa i niesäowa Inne kotwice OkreĈlenie grupy znaków jako dosäownych Dodawanie znaczników Czego dowiedziaäeĈ siö z rozdziaäu 3.? Informacje techniczne 4. Alternatywy, grupy i odniesienia ................................................. 61 62 65 67 70 73 73 Alternatywy Podwzorce Grupy przechwytywania i odwoäania wsteczne Grupy nieprzechwytujñce Czego dowiedziaäeĈ siö z rozdziaäu 4.? Informacje techniczne 5. Klasy znaków .................................................................................75 77 77 80 82 82 Negacja klasy znaków Zäñczenia i róĔnice Klasy znaków POSIX Czego dowiedziaäeĈ siö z rozdziaäu 5.? Informacje techniczne 6. Dopasowanie Unicode i innych znaków .......................................83 84 88 88 92 94 94 Dopasowanie znaku Unicode Dopasowanie znaków liczb ósemkowych Dopasowanie wäaĈciwoĈci znaku Unicode Dopasowanie znaków kontrolnych Czego dowiedziaäeĈ siö z rozdziaäu 6.? Informacje techniczne 4 _ Spis treļci Poleć książkęKup książkę 7. Kwantyfikatory ..............................................................................97 98 99 100 101 103 104 104 Zachäanne, leniwe i zaborcze Dopasowanie za pomocñ *, + oraz ? Dopasowanie okreĈlonñ liczbö razy Kwantyfikatory leniwe Kwantyfikatory zaborcze Czego dowiedziaäeĈ siö z rozdziaäu 7.? Informacje techniczne 8. Przewidywania ............................................................................ 105 105 108 109 109 110 110 Przewidywanie pozytywne Przewidywania negatywne Pozytywne przewidywanie wsteczne Negatywne przewidywanie wsteczne Czego dowiedziaäeĈ siö z rozdziaäu 8.? Informacje techniczne 9. Dodawanie znaczników HTML5 do dokumentu ......................... 111 112 113 117 119 125 125 Dopasowanie znaczników Transformacja zwykäego tekstu za pomocñ narzödzia sed Dodawanie znaczników Transformacja zwykäego tekstu za pomocñ jözyka Perl Czego dowiedziaäeĈ siö z rozdziaäu 9.? Informacje techniczne 10. To juŜ koniec ................................................................................ 127 129 129 Dalsza nauka WaĔne narzödzia, implementacje i biblioteki Dopasowanie numeru telefonu w formacie stosowanym w Ameryce Póänocnej Dopasowanie adresu e-mail Czego dowiedziaäeĈ siö z rozdziaäu 10.? 132 133 134 A Odniesienia do wyraŜeħ regularnych ......................................... 135 B Sĥownik wyraŜeħ regularnych .................................................... 153 Skorowidz ............................................................................................... 163 Spis treļci _ 5 Poleć książkęKup książkę 6 _ Spis treļci Poleć książkęKup książkę ROZDZIAĤ 4. Alternatywy, grupy i odniesienia MiaäeĈ juĔ okazjö zobaczyè grupy w dziaäaniu. Tekst grupy znajduje siö w nawiasie, a sama grupa ma za zadanie pomóc w wykonywaniu pewnych operacji, na przykäad w: x obsäudze alternatywy, czyli wyborze miödzy co najmniej dwoma opcjo- nalnymi wzorcami; x tworzeniu podwzorców; x przechwytywaniu grupy w celu póĒniejszego odniesienia siö do niej za pomocñ odwoäania wstecznego; x zastosowaniu pewnej operacji do zgrupowanego wzorca, przykäadowo kwantyfikatora; x uĔywaniu grup nieprzechwytujñcych; x uĔywaniu grup niepodzielnych (temat zaawansowany). Oprócz tekstu The Rime of the Ancyent Mariner z pliku rime.txt w tym roz- dziale zostanie przedstawionych takĔe kilka innych przykäadów. Bödö uĔywaè biurowej wersji aplikacji RegExr oraz innych narzödzi, na przy- käad sed. Biurowñ wersjö aplikacji RegExr dla systemów Windows, Mac i Linux moĔesz pobraè z strony http://www.gskinner.com/RegExr/desktop/ (aplikacja zostaäa utworzona w technologii Adobe AIR). Wiöcej informacji znajdziesz na wskazanej stronie. 61 Poleć książkęKup książkę Alternatywy Ujmujñc rzecz najproĈciej, alternatywa pozwala na wybór wzorców do do- pasowania. Przyjmujemy zaäoĔenie, Ĕe chcesz siö dowiedzieè, ile razy säowo the wystöpuje w utworze The Rime of the Ancyent Mariner. Problem polega na tym, Ĕe to säowo jest w utworze pisane w postaci THE, The i the. Rozwiñ- zaniem problemu jest wówczas uĔycie alternatywy. Uruchom biurowñ wersjö aplikacji RegExr, dwukrotnie klikajñc jej ikonö. Apli- kacja wyglñda niemal tak samo jak wersja sieciowa, ale ma tö zaletö, Ĕe dziaäa na komputerze lokalnym niezaleĔnie od ewentualnych problemów zwiñzanych z sieciñ, które czasem pojawiajñ siö podczas uĔywania aplikacji sieciowych. Na potrzeby omawianego èwiczenia skopiowaäem caäy utwór z pliku rime.txt, a nastöpnie wkleiäem go w aplikacji RegExr. UĔywana przeze mnie wersja systemu to Mac OS X 10.7 (Lion). W górnym polu tekstowym aplikacji wprowadĒ wyraĔenie regularne: (the|The|THE) które spowoduje podĈwietlenie w dolnym polu tekstowym wszystkich wystñ- pieþ säowa the w utworze (zobacz rysunek 4.1). Aby zobaczyè kolejne podĈwie- tlone wystñpienia säowa the w tekĈcie docelowym, uĔyj przycisków przewijania. Rysunek 4.1. UĔycie alternatywy w biurowej wersji aplikacji RegExr 62 _ Rozdziaĥ 4. Alternatywy, grupy i odniesienia Poleć książkęKup książkę Istnieje moĔliwoĈè skrócenia przedstawionej grupy poprzez zastosowanie opcji. Opcje pozwalajñ na okreĈlenie, jak ma byè przeprowadzone wyszu- kiwanie wzorca. Przykäadowo opcja: (?i) powoduje, Ĕe wzorzec nie rozróĔnia wielkoĈci liter. Dlatego teĔ zamiast pierwotnego wzorca alternatywy moĔemy uĔyè poniĔszego: (?i)the Wypróbuj to wyraĔenie regularne w aplikacji RegExr i przekonaj siö, jaki bödzie wynik jego dziaäania. Ignorowanie wielkoĈci liter moĔna wäñczyè takĔe poprzez zaznaczenie pola wyboru ignoreCase w aplikacji RegExr. Oba wymienione sposoby dajñ taki sam wynik. Przedstawionñ opcjö oraz kilka innych wymieniono w tabeli 4.1. Tabela 4.1. Opcje wyraĔeþ regularnych Opcja (?d) (?i) (?J) (?m) (?s) (?u) (?U) (?x) (?-…) Opis Wiersze w systemie Unix Wielkoļë liter Zezwolenie na duplikaty Multiline Pojedynczy wiersz (dotall) Wielkoļë liter w Unicode Domyļlne dopasowanie leniwe Ignoruj znaki niewidoczne i komentarze Wĥéczenie lub wyĥéczenie opcji Obsĥugiwana przez Java PCRE, Perl, Java PCRE1 PCRE, Perl, Java PCRE, Perl, Java Java PCRE PCRE, Perl, Java PCRE Teraz uĔyjemy alternatywy podczas pracy z narzödziem grep. Warto w tym miejscu wspomnieè, Ĕe opcje wymienione w tabeli 4.1 nie dziaäajñ z narzödziem grep, wiöc konieczne bödzie uĔycie pierwotnego wzorca al- ternatywy. Aby obliczyè liczbö wierszy, w których säowo the zapisane za pomocñ znaków o dowolnej wielkoĈci wystöpuje przynajmniej jeden raz, wydaj nastöpujñce polecenie: grep -Ec (the|The|THE) rime.txt Otrzymane dane wyjĈciowe sñ proste: 327 1 Zobacz sekcjö „Named Subpatterns” na stronie http://www.pcre.org/pcre.txt. Alternatywy _ 63 Poleć książkęKup książkę Wynik nie mówi wszystkiego, ale o tym za chwilö. Oto dokäadna analiza wydanego polecenia narzödzia grep: x opcja -E oznacza uĔycie rozszerzonych wyraĔeþ regularnych (ERE) za- miast zwykäych (BRE), dziöki czemu unikasz koniecznoĈci poprzedzania ukoĈnikami nawiasów i pionowych kresek, jak ma to miejsce w przy- padku wyraĔeþ BRE, na przykäad \(THE\|The\|the\); x opcja -c zwraca liczbö dopasowanych wierszy (a nie dopasowanych säów); x w nawiasie znajduje siö grupa alternatywy (the, The i THE); x pionowa kreska oddziela poszczególne moĔliwoĈci zapisu sprawdzane od lewej do prawej strony. PoniĔsze polecenie zwróci wszystkie wystñpienia wskazanego säowa, wiersz po wierszu: grep -Eo (the|The|THE) rime.txt | wc -l Dane wyjĈciowe wykonanego polecenia to: 412 A oto jego dokäadne omówienie: x opcja -o oznacza wyĈwietlenie jedynie tej czöĈci wiersza, która zostaäa dopasowana do wzorca — w omawianym przykäadzie dane nie bödñ jednak wyĈwietlone na ekranie, poniewaĔ sñ potokowane (|) do pole- cenia wc; x w omawianym kontekĈcie pionowa kreska powoduje przekazanie da- nych wyjĈciowych narzödzia grep jako danych wejĈciowych polecenia wc — polecenie wc oblicza liczbö säów, natomiast jego opcja -l zlicza liczbö wierszy danych wejĈciowych. Skñd wziöäa siö tak duĔa róĔnica: jedno polecenie zwraca 327 wystñpieþ, natomiast drugie 412? OdpowiedĒ jest prosta: poniewaĔ opcja -c podaje liczbö dopasowanych wierszy, a przecieĔ w wierszu moĔe znajdowaè siö wiöcej niĔ tylko jedno wystñpienie szukanego säowa. JeĔeli uĔyjemy opcji -o wraz z wc -l, wówczas kaĔde wystñpienie säowa w dowolnej formie (wiel- koĈè znaków) zostanie umieszczone w oddzielnym wierszu i zliczone, co da w efekcie liczbö 412. To samo zadanie, ale wykonane za pomocñ jözyka Perl, wymaga uĔycia poniĔszego polecenia: perl -ne print if /(the|The|THE)/ rime.txt 64 _ Rozdziaĥ 4. Alternatywy, grupy i odniesienia Poleć książkęKup książkę Jeszcze lepszym rozwiñzaniem bödzie uĔycie wspomnianej wczeĈniej opcji (?i), ale bez alternatywy: perl -ne print if /(?i)the/ rime.txt Jednak najlepsze rozwiñzanie polega na dodaniu modyfikatora i po ostat- nim ograniczniku wzorca: perl -ne print if /the/i rime.txt Po wykonaniu powyĔszych poleceþ otrzymasz takie same dane wyjĈciowe jak wczeĈniej. Im prostsze podejĈcie, tym lepiej. Listö innych modyfikato- rów (nazywanych takĔe flagami) przedstawiono w tabeli 4.2. Porównaj teĔ opcje (podobne, ale stosujñce innñ skäadniö) wymienione w tabeli 4.1. Tabela 4.2. Modyfikatory (flagi) w jözyku Perl2 Modyfikator a c d g i l m p s u x Opis Dopasowanie \d, \s, \w i POSIX jedynie w zakresie ASCII Zachowaj bieŜéce poĥoŜenie, jeļli próba dopasowania zakoħczy siý niepowodzeniem UŜyj domyļlnych, rodzimych reguĥ uŜywanego systemu Dopasowanie globalne Dopasowanie bez uwzglýdnienia wielkoļci liter UŜycie reguĥ ustawieħ regionalnych uŜytkownika Ciégi tekstowe obejmujéce wiele wierszy Zachowanie dopasowanego ciégu tekstowego Traktowanie ciégów tekstowych jako pojedynczego wiersza UŜycie reguĥ Unicode podczas dopasowania Ignorowanie znaków niewidocznych i komentarzy Podwzorce Bardzo czösto, odwoäujñc siö do podwzorców w wyraĔeniach regularnych, odnosimy siö do grupy lub grup wewnñtrz innych grup. Podwzorzec jest wiöc wzorcem w innym wzorcu. Czösto zdarza siö, Ĕe warunek zawarty w podwzorcu jest moĔliwy do speänienia po dopasowaniu wczeĈniejszego wzorca, ale to nie jest reguäñ. Podwzorce moĔna tworzyè na wiele róĔnych sposobów. W tym podrozdziale skoncentrujemy siö przede wszystkim na podwzorcach definiowanych przez uĔycie nawiasów. 2 Zobacz http://perldoc.perl.org/perlre.html#Modifiers. Podwzorce _ 65 Poleć książkęKup książkę W pewnym sensie uĔyty we wczeĈniejszej czöĈci rozdziaäu wzorzec: (the|The|THE) ma trzy podwzorce: pierwszy to the, drugi to The, a trzeci to THE. W oma- wianym przypadku dopasowanie na przykäad drugiego podwzorca zu- peänie nie zaleĔy od dopasowania pierwszego. (Jako pierwszy zostanie do- pasowany wzorzec pierwszy z lewej strony). PoniĔej widaè przykäad podwzorców, których dopasowanie zaleĔy od do- pasowania wczeĈniejszego wzorca: (t|T)h(e|eir) To wyraĔenie regularne powoduje dopasowanie dosäownych znaków t lub T, nastöpnie h, a dalej litery e lub liter eir. Dlatego teĔ moĔe dopasowaè dowolne z poniĔszych säów: x the x The x their x Their W tym przypadku drugi podwzorzec (e|eir) jest zaleĔny od pierwszego (t|T). Podwzorce nie wymagajñ uĔywania nawiasów. PoniĔej przedstawiono de- finicjö podwzorców, do której utworzenia wykorzystano klasy znaków: \b[tT]h[ceinry]*\b PowyĔsze wyraĔenie regularne moĔe dopasowaè oprócz säów the lub The takĔe thee, thy i thence. Dwa wyraĔenia granicy säowa (\b) powodujñ, Ĕe bödzie ono dopasowywaäo caäe säowa, a nie litery znajdujñce siö w innych säowach. Oto dokäadne omówienie przedstawionego wyraĔenia regularnego: x wyraĔenie \b powoduje dopasowanie granicy poczñtku säowa; x [tT] to klasa znaków powodujñca dopasowanie maäej litery t lub duĔej litery T — ten fragment wyraĔenia regularnego moĔemy uznaè za pod- wzorzec; x nastöpnie wzorzec dopasowuje (lub próbuje dopasowaè) maäñ literö h; x drugi i zarazem ostatni podwzorzec równieĔ jest zdefiniowany w po- staci klasy znaków [ceinry], po której znajduje siö kwantyfikator * okreĈlajñcy dopasowanie zero lub wiöcej razy; x na koþcu wyraĔenia regularnego mamy kolejne dopasowanie granicy säowa \b. 66 _ Rozdziaĥ 4. Alternatywy, grupy i odniesienia Poleć książkęKup książkę Jednym z bardziej interesujñcych aspektów wyraĔeþ regularnych jest to, Ĕe stosowana terminologia moĔe byè blisko zwiñzana ze znaczeniem danej operacji lub wröcz przeciwnie. Decydujñc siö na uĔycie terminu podwzorzec oraz innych w niniejszej ksiñĔce, przeanalizowaäem wiele Ēródeä i spróbowaäem je wszystkie poäñczyè. Na pewno znajdñ siö Czytelnicy, którzy bödñ siö upie- raè, Ĕe klasa znaków nie jest podwzorcem. UwaĔam, Ĕe skoro klasy znaków mogñ dziaäaè tak jak podwzorce, to mogö je wrzuciè do jednego worka. Grupy przechwytywania i odwoĥania wsteczne Kiedy wzorzec grupuje caäñ treĈè lub jej czöĈè w nawiasach, wówczas przechwytuje tö treĈè i przechowuje jñ tymczasowo w pamiöci. Nastöpnie, jeĈli chcesz, moĔesz ponownie wykorzystaè tö treĈè, uĔywajñc odwoäania wstecznego w postaci: \1 lub: $1 przy czym \1 lub $1 odwoäujñ siö do pierwszej grupy przechwytywania, \2 lub $2 — do drugiej itd. Narzödzie sed akceptuje jedynie postaè \1, nato- miast jözyk Perl dopuszcza obie. Poczñtkowo narzödzie sed obsäugiwaäo odwoäania wsteczne w zakresie od \1 do \9, ale takie ograniczenie juĔ nie istnieje. Odwoäania wsteczne juĔ widziaäeĈ w dziaäaniu, ale przedstawiö je raz jeszcze. W omawianym przykäadzie wykorzystamy je do zmiany kolejnoĈci säów w wierszu utworu, za co przepraszam Samuela Taylora Coleridge’a. W apli- kacji RegExr kliknij kartö Replace, a nastöpnie w górnym polu tekstowym wprowadĒ wzorzec: (It is) (an ancyent Marinere) Przewijaj trzecie pole tekstowe zawierajñce tekst docelowy, aĔ zobaczysz podĈwietlony wiersz, a póĒniej w drugim polu tekstowym wprowadĒ takie wyraĔenie: $2 $1 Grupy przechwytywania i odwoĥania wsteczne _ 67 Poleć książkęKup książkę W dolnym polu tekstowym zobaczysz, Ĕe säowa w podĈwietlonym wierszu zostaäy zamienione miejscami (spójrz na rysunek 4.2). an ancyent Marinere It is, Rysunek 4.2. Odwoäania wsteczne za pomocñ wyraĔeþ $1 i $2 PoniĔsze polecenie pozwala na wykonanie tego samego zadania, ale za pomocñ narzödzia sed: sed -En s/(It is) (an ancyent Marinere)/\2 \1/p rime.txt Otrzymane dane wyjĈciowe polecenia sñ nastöpujñce: an ancyent Marinere It is, Wynik operacji jest wiöc dokäadnie taki sam, jak uzyskany w aplikacji RegExr. PoniĔej przedstawiono dokäadne omówienie dziaäania wywoäania narzödzia sed. Dziöki temu moĔesz dobrze zrozumieè, jak naprawdö dziaäa omawiane polecenie. x opcja -E powoduje uĔycie rozszerzonych wyraĔeþ regularnych (ERE), co zwalnia Ciö na przykäad z koniecznoĈci poprzedzania nawiasów ukoĈnikami; x opcja -n zawiesza zachowanie domyĈlne polegajñce na wyĈwietleniu kaĔdego wiersza; 68 _ Rozdziaĥ 4. Alternatywy, grupy i odniesienia Poleć książkęKup książkę x polecenie zastöpowania powoduje wyszukanie dopasowanego tekstu It is an ancyent Marinere i przechwytuje go w dwóch grupach; x polecenie zastöpowania powoduje takĔe zmianö kolejnoĈci säów w do- pasowanym tekĈcie, uĔywajñc do tego odwoäaþ wstecznych: najpierw \2, a póĒniej \1; x opcja p na koþcu polecenia zastöpowania oznacza wyĈwietlenie zmo- dyfikowanego wiersza. Polecenie w jözyku Perl wykonujñce takie samo zadanie ma postaè: perl -ne print if s/(It is) (an ancyent Marinere)/\2 \1/ rime.txt Zwróè uwagö na uĔycie skäadni w stylu \1. OczywiĈcie masz równieĔ moĔliwoĈè uĔycia skäadni $1: perl -ne print if s/(It is) (an ancyent Marinere)/$2 $1/ rime.txt Bardzo podoba mi siö sposób, w jaki Perl pozwala na wyĈwietlenie wska- zanego wiersza. Chciaäbym jeszcze zwróciè uwagö na jednñ rzecz w wy- Ĉwietlonych danych wyjĈciowych: an ancyent Marinere It is, Podczas transformacji zostaäa zachowana wielkoĈè liter. Perl pozwala rozwiñzaè ten problem dziöki uĔyciu \u i \l: perl -ne print if s/(It is) (an ancyent Marinere)/\u$2 \l$1/ rime.txt Teraz otrzymane dane wyjĈciowe przedstawiajñ siö znacznie lepiej: An ancyent Marinere it is, Oto dokäadne omówienie dziaäania wyraĔeþ \u i \l: x skäadnia \l nie dopasowuje Ĕadnego znaku, ale zmienia znajdujñcy siö po niej znak na maäy; x skäadnia \u zmienia znajdujñcy siö po niej znak na wielki; x dyrektywa \U (nieuĔyta w przykäadzie) zmienia caäy ciñg tekstowy znajdujñcy siö po niej na zapisany wielkimi literami; x dyrektywa \L (nieuĔyta w przykäadzie) zmienia caäy ciñg tekstowy znajdujñcy siö po niej na zapisany maäymi literami. Wymienione dyrektywy dziaäajñ aĔ do wystñpienia kolejnej (w przypadku \l lub \E do koþca ciñgu tekstowego). Poeksperymentuj z nimi i przekonaj siö, jaki jest ich sposób dziaäania. Grupy przechwytywania i odwoĥania wsteczne _ 69 Poleć książkęKup książkę Nazwane grupy Nazwane grupy to po prostu grupy przechwytywania wraz ze zdefinio- wanymi nazwami. Dostöp do takich grup odbywa siö poprzez ich nazwy, a nie liczby. Oto sposób uĔycia nazwanych grup w jözyku Perl: perl -ne print if s/(? one It is) (? two an ancyent Marinere)/\u$+{two} \l$+{one}/ rime.txt PowyĔsze polecenie dziaäa nastöpujñco: x dodanie ? one i ? two w nawiasach powoduje zdefiniowanie nazw dla danych grup, odpowiednio one i two; x $+{one} odwoäuje siö do grupy o nazwie one, natomiast $+{two} — do grupy o nazwie two. Nazwanych grup moĔna równieĔ uĔywaè wewnñtrz wzorca, w którym zostaäy nazwane. PoniĔej wyjaĈniö Ci, co to oznacza. Przyjmujemy zaäoĔe- nie, Ĕe szukany jest ciñg tekstowy skäadajñcy siö z szeĈciu zer: 000000 To naciñgany przykäad, ale ma za zadanie jedynie zademonstrowaè spo- sób dziaäania. Grupö trzech zer w podanym wzorcu nazywamy z (moĔna uĔyè dowolnej nazwy): (? z 0{3}) Nastöpnie tak nazwanej grupy moĔna uĔyè ponownie w taki sposób: (? z 0{3})\k z taki: (? z 0{3})\k z lub taki: (? z 0{3})\g{z} Wypróbuj powyĔsze wyraĔenia regularne w aplikacji RegExr i przekonaj siö, jaki jest wynik ich dziaäania. W tabeli 4.3 wymieniono wiele przykäadów skäadni odwoäywania siö do nazwanych grup. Grupy nieprzechwytujéce Istniejñ równieĔ tak zwane grupy nieprzechwytujñce, to znaczy takie, które nie przechowujñ swojej zawartoĈci w pamiöci. Czasami takie rozwiñzanie bödzie zaletñ, zwäaszcza jeĈli nigdy nie masz zamiaru odwoäaè siö do grupy. 70 _ Rozdziaĥ 4. Alternatywy, grupy i odniesienia Poleć książkęKup książkę Tabela 4.3. Skäadnia nazwanych grup Skĥadnia (? nazwa ...) (?nazwa...) (?P nazwa ...) \k nazwa \k nazwa \g{nazwa} \k{nazwa} (?P=nazwa) Opis Nazwana grupa Inna nazwana grupa Nazwana grupa (w jýzyku Python) Odniesienie poprzez nazwý (w jýzyku Perl) Odniesienie poprzez nazwý (w jýzyku Perl) Odniesienie poprzez nazwý (w jýzyku Perl) Odniesienie poprzez nazwý (w jýzykach .NET) Odniesienie poprzez nazwý (w jýzyku Python) PoniewaĔ grupa nie przechowuje swojej treĈci, jej dziaäanie moĔe charak- teryzowaè siö wiökszñ wydajnoĈciñ. Jednak w przypadku tak prostych przykäadów jak prezentowane w niniejszej ksiñĔce kwestie zwiñzane z wydajnoĈciñ nie wystöpujñ. Pamiötasz pierwszñ grupö przedstawionñ w tym rozdziale? Dla przypo- mnienia: (the|The|THE) PoniewaĔ nie ma potrzeby odwoäywania siö do powyĔszej grupy, moĔna jñ zdefiniowaè jako grupö nieprzechwytujñcñ. Wymaga to wyraĔenia regu- larnego w nastöpujñcej postaci: (?:the|The|THE) Opierajñc siö na materiale przedstawionym na poczñtku rozdziaäu, po- wyĔsze wyraĔenie moĔna uzupeäniè o opcjö powodujñcñ, Ĕe wzorzec nie rozróĔnia wielkoĈci liter (chociaĔ w przypadku tej grupy nie trzeba doda- waè wymienionej opcji): (?i)(?:the) Inny sposób: (?:(?i)the) Najlepiej jednak uĔyè poniĔszego zapisu: (?i:the) Litera i opcji moĔe zostaè umieszczona pomiödzy znakiem zapytania i dwu- kropkiem. Grupy nieprzechwytujéce _ 71 Poleć książkęKup książkę Grupy niepodzielne Inny rodzaj grupy nieprzechwytujñcej to tak zwana grupa niepodzielna. JeĔeli korzystasz z silnika wyraĔeþ regularnych obsäugujñcego sprawdza- nie wsteczne (ang. backtracking), taka grupa spowoduje wyäñczenie spraw- dzania wstecznego, ale nie w przypadku silnika wyraĔeþ regularnych, lecz tylko w odniesieniu do czöĈci wyraĔenia ujötej w grupie niepodzielnej. Skäadnia przedstawia siö tak: (? the) Do czego mogñ säuĔyè grupy niepodzielne? Jednym z czynników, który moĔe naprawdö spowolniè przetwarzanie wyraĔenia regularnego, jest wäaĈnie sprawdzanie wsteczne. Powód jest prosty: sprawdzenie wszystkich moĔ- liwoĈci wymaga czasu i zasobów komputera. Czasami przetworzenie wy- raĔenia regularnego moĔe pochäonñè naprawdö ogromnñ iloĈè czasu. Kiedy sytuacja staje siö powaĔna, uĔywane jest okreĈlenie katastrofalne spraw- dzanie wsteczne. Sprawdzanie wsteczne moĔna wyäñczyè, uĔywajñc silnika wyraĔeþ regu- larnych pozbawionego jego obsäugi, na przykäad re2 (http://code.google.com/ p/re2/), lub wyäñczajñc sprawdzanie wsteczne dla fragmentów wyraĔenia regularnego przez uĔycie grup niepodzielnych. W niniejszej ksiñĔce skoncentrowaäem siö na przedstawieniu skäadni, dlatego niewiele miejsca poĈwiöcö na omówienie za- gadnieþ optymalizacji prowadzñcej do zwiökszenia wydajnoĈci dziaäania wyraĔeþ regularnych. Z mojego punktu widzenia grupy podzielne sñ stosowane przede wszystkim ze wzglödu na wy- dajnoĈè. Z rozdziaäu 5. dowiesz siö wiöcej na temat klas znaków. 72 _ Rozdziaĥ 4. Alternatywy, grupy i odniesienia Poleć książkęKup książkę Czego dowiedziaĥeļ siý z rozdziaĥu 4.? x Alternatywa pozwala na wybranie z dwóch lub wiökszej liczby wzorców. x Czym sñ modyfikatory oraz jak moĔna ich uĔywaè we wzorcach? x Jakie sñ rodzaje podwzorców? x Jak uĔywaè grup przechwytywania oraz odwoäaþ wstecznych? x Jak uĔywaè nazwanych grup oraz jak odwoäywaè siö do nich? x Jak uĔywaè grup nieprzechwytujñcych? x Co to sñ grupy niepodzielne? Informacje techniczne x ćrodowisko Adobe AIR pozwala na skorzystanie z technologii HTML, JavaScript, Flash i ActionScript do tworzenia aplikacji sieciowych dziaäajñcych jako samodzielne aplikacje po stronie klienta bez ko- niecznoĈci uĔywania przeglñdarki internetowej do ich uruchamiania. Wiöcej informacji na temat Adobe AIR znajdziesz na stronie http:// www.adobe.com/pl/products/air.html. x Python (http://www.python.org/) to äatwy do zrozumienia jözyk pro- gramowania wysokiego poziomu. Python zawiera implementacjö wy- raĔeþ regularnych (zobacz http://docs.python.org/2/library/re.html). x .NET (http://www.microsoft.com/net) to platforma programistyczna opra- cowana dla Windowsa. Ona równieĔ zawiera implementacjö wyraĔeþ regularnych (zobacz http://msdn.microsoft.com/en-us/library/hs600312.aspx). x Bardziej zaawansowane objaĈnienie tematu grup niepodzielnych znaj- dziesz na stronach http://www.regular-expressions.info/atomic.html i http:// stackoverflow.com/questions/6488944/atomic-group-and-non-capturing-group. Informacje techniczne _ 73 Poleć książkęKup książkę 74 _ Rozdziaĥ 4. Alternatywy, grupy i odniesienia Poleć książkęKup książkę SKOROWIDZ [[:word:]], 81 [[:xdigit:]], 81 [0-9], 17 [\b], 34 \0, 34, 92 \1, 19, 67 \a, 34 \A, 52 \cx, 34, 92 \d, 13, 18, 34 \D, 18, 32, 34 \dxx, 34 \E, 53 \f, 36 \h, 36 \H, 36 \l, 69 \L, 69 \n, 35, 36 \oxxx, 34 \Q, 53 \r, 35, 36 \s, 35, 36 \S, 36 \t, 35, 36 \u, 69 \U, 69 \uxxxx, 34 \v, 36 163 $1, 67 (?-…), 63 (?d), 63 (?i), 63 (?J), 63 (?m), 63 (?s), 63 (?u), 63 (?U), 63 (?x), 63 *, znak, 20 .*, 99 ., znak, 19 .NET, 73 ?, znak, 20 [[:^alpha:]], 81 [[:^xxxx:]], 81 [[:alnum:]], 81 [[:alpha:]], 81 [[:ascii:]], 81 [[:blank:]], 81 [[:ctrl:]], 81 [[:digit:]], 81 [[:graph:]], 81 [[:lower:]], 81 [[:print:]], 81 [[:punct:]], 81 [[:space:]], 81 [[:upper:]], 81 Poleć książkęKup książkę \V, 36 \w, 32, 34 \W, 33, 34 \x xx, 34 \z, 52 \Z, 52 +, znak, 20 A ack, narzödzie, 88, 89, 95 Adobe AIR, 73 alarm, 34 alternatywy, 62, 153 ASCII, 83, 153 tablica kodów, 147, 148, 149, 150, 151 AsciiDoc, 125 asercja, 47, 153 o zerowej däugoĈci, 47, 105, 153 atomy, Patrz metaznaki B Backspace, dopasowanie, 34, 93 Bell, dopasowanie, 92 BRE, 51, 153, 157 bufor roboczy, Patrz przestrzeþ wzorca C code point, Patrz punkt kodowy composability, 26, 160 cyfry, dopasowanie, 17, 18, 30, 34 Cygwin, 10 D dopasowanie, 154 alarm, 34 Backspace, znak, 34, 93 Bell, znak, 92 cyfry, 18, 34 164 _ Skorowidz e-mail, 133 Esc, znak, 93 inny niĔ cyfra, znak, 18, 32, 34 inny niĔ niewidoczny, znak, 36 inny niĔ spacja, znak, 36 kontrolny, znak, 34, 92 leniwe, 154 liczba ósemkowa, 88 niepionowy tabulator, 36 niepoziomy znak niewidoczny, 36 niesäowo, 33, 34 niewidoczny, znak, 35 nowy wiersz, znak, 35, 36 null, znak, 34, 92 numer telefonu, 132 okreĈlonñ liczbö razy, 100 pionowy tabulator, 36 poczñtek i koniec wiersza, 47, 48 powrót na poczñtek wiersza, znak, 35, 36 poziomy tabulator, 36 poziomy znak niewidoczny, 36 säowo, 32, 34 spacja, 36 tabulator, 35 Unicode, 34, 84 wartoĈè dziesiötna znaku, 34 wartoĈè ósemkowa znaku, 34 wartoĈè szesnastkowa znaku, 34 wysuniöcie strony, znak, 36 zaborcze, 154 zachäanne, 154 znaczniki, 112 dosäowny ciñg tekstowy, 17, 29, 154 E echo, polecenie, 40 ed, edytor, 154 egrep, narzödzie, 155 e-mail, dopasowanie, 133 ERE, 51, 154, 158 Esc, dopasowanie, 93 Poleć książkęKup książkę F fgrep, narzödzie, 155 flaga, Patrz modyfikator fragment, 154 G gaäñĒ, 155 Git, 44 GitHub, 44 granice, Patrz kwantyfikatory grep, narzödzie, 51, 59, 155 grupy, 155 niepodzielne, 72, 155 nieprzechwytujñce, 70, 155 przechwytywania, 19, 67, 155 gwiazda Kleene a, 99 gwiazdka, znak, 20 HTML5, 44 H K katastrofalne sprawdzanie wsteczne, 72, 156 klasy znaków, 17, 75, 76, 77, 156 negacja, 77 POSIX, 80, 81, 145 Kleene, Stephen, 7 kotwice, 47, 52, 156 kropka, znak, 19, 37 kwantyfikatory, 20, 97, 98, 156 leniwe, 98, 101, 102 podstawowe, 100 zaborcze, 98, 103, 104 zachäanne, 98 L Levithan, Steven, 27 literaä, 29, 156 Lovitt, Michael, 82 M McMahon, Lee, 40 metaznaki, 17, 137, 156 modyfikatory, 146, 156 N nazwane grupy, 70, 71 negacja, 157 negatywne przewidywanie wsteczne, 109, 157 niepionowy tabulator, dopasowanie, 36 niepoziomy znak niewidoczny, dopasowanie, 36 niesäowo dopasowanie, 33, 34 granice, 49, 50 Notepad++, edytor, 24, 26 null, dopasowanie, 34, 92 numer telefonu, dopasowanie, 16, 17, 18, 19, 20, 21, 22, 132 O odwoäania wsteczne, 19, 67, 157 ograniczone wystñpienia, Patrz kwantyfikatory Oniguruma, 131 opcje, 146, 157 Opera Next, 82 Oxygen, edytor, 24, 26 Skorowidz _ 165 Poleć książkęKup książkę P PCRE, 59, 130 pcregrep, 52, 130 Perl, 42, 43, 45, 130, 157 dodawanie znaczników, 57, 119 modyfikatory, 65, 146 obsäuga liczb rzymskich, 122 obsäuga wierszy, 122 plik poleceþ, 123 perldoc, 126 pionowy tabulator, dopasowanie, 36 plus, znak, 20 podstawowe wyraĔenia regularne, Patrz BRE podwzorzec, 65, 66 POSIX, 80, 82, 157 klasy znaków, 145 poziomy tabulator, dopasowanie, 36 poziomy znak niewidoczny, dopasowanie, 36 pozytywne przewidywanie wsteczne, 109, 157 przestrzeþ wzorca, 158 przewidywania, 105, 158 negatywne, 108 pozytywne, 105 wstecz, 158 punkt kodowy, 14, 158 Python, 73, 131 Q QED, edytor, 7, 13, 135 wyraĔenia regularne, 136 R Rackham, Stuart, 125 RE2, 132 Regex Hero, aplikacja, 85, 94 RegexPal, 14, 15, 26 166 _ Skorowidz RegExr, 27, 28, 44 dodawanie znaczników, 54, 55 Reggy, aplikacja, 78, 82 rozszerzone wyraĔenia regularne, Patrz ERE Rubular, aplikacja, 80, 82 Ruby, 131 S sed, narzödzie, 40, 44, 159 dodawanie znaczników, 55, 56, 113 obsäuga liczb rzymskich, 115 obsäuga wierszy, 116 plik poleceþ, 118 zastöpowanie znaków, 114 Skinner, Grant, 27 säowo dopasowanie, 32, 34 granice, 49, 50 spacja, dopasowanie, 36 sprawdzanie wsteczne, 98, 159 system szesnastkowy, 159 T tabulator, dopasowanie, 35 TextMate, edytor, 23, 26 Thomson, Ken, 7, 13, 59, 154, 155 U Unicode, 83, 159 dla znaków niewidocznych, 139, 140 dopasowanie, 34, 84 wäaĈciwoĈci znaku, 88, 90, 91 utrzymywana przestrzeþ, 160 utrzymywany bufor, Patrz utrzymywana przestrzeþ Poleć książkęKup książkę znak inny niĔ cyfra, dopasowanie, 18, 32, 34 znak inny niĔ spacja, dopasowanie, 36 znak kontrolny, dopasowanie, 34, 92, 140, 141 znak niewidoczny, dopasowanie, 35, 139, 140 znak nowego wiersza, dopasowanie, 35, 36 znak ósemkowy, 161 znak powrotu na poczñtek wiersza, dopasowanie, 35, 36 znak sterujñcy, 18, 161 znak wysuniöcia strony, dopasowanie, 36 znak zapytania, 20 znaki skrótów, 14, 18, 138 dla znaków niewidocznych, 36, 139 lista, 34 V vi, edytor, 51, 59, 160 vim, edytor, 51, 59, 94, 160 dopasowanie znaku Unicode, 87 W Wall, Larry, 42 wartoĈè dziesiötna znaku, dopasowanie, 34 wartoĈè ósemkowa znaku, dopasowanie, 34 wartoĈè szesnastkowa znaku, dopasowanie, 34 wiersz, poczñtek i koniec, 47, 48 wäaĈciwoĈci znaku, 142, 143 wyraĔenia regularne, 7, 13, 161 opcje, 63 wyraĔenia w nawiasach, Patrz klasy znaków wzorce, 27 Z zakres, 31 skäadnia, 101 zestaw znaków, 17, 77, 161 znaczniki, dopasowanie, 112 Skorowidz _ 167 Poleć książkęKup książkę O autorze Michael Fitzgerald to programista i konsultant, napisaä 10 ksiñĔek technicz- nych dla wydawnictw O’Reilly oraz John Wiley Sons, jak równieĔ kilka ar- tykuäów dla serwisu O’Reilly Network. Byä takĔe czäonkiem komisji, która opracowaäa RELAX NG, czyli jözyk schematów do jözyka XML. Kolofon Zwierzö na okäadce ksiñĔki WyraĔenia regularne. Wprowadzenie to nietoperz owocowy. Nietoperz owocowy naleĔy do podrzödu nietoperzy owocoĔernych (Megachi- roptera) i rodziny rudawkowatych (Pteropodidae), bywa równieĔ nazywany la- tajñcym lisem lub latajñcym psem. Pomimo swojej nazwy poszczególne osob- niki wchodzñce w skäad caäej rodziny rudawkowatych mogñ znacznie róĔniè siö rozmiarem ciaäa — najmniejszy przedstawiciel mierzy zaledwie szeĈè centy- metrów, podczas gdy inny osobnik moĔe waĔyè okoäo kilograma, a rozpiötoĈè skrzydeä moĔe wynosiè nawet okoäo póätora metra. Jednak zgodnie ze swojñ nazwñ nietoperze owocowe, tak jak i inne nietoperze owocoĔerne, odĔywiajñ siö albo owocami, albo nektarem kwiatowym. Niektóre przegryzajñ zöbami skórkö owocowñ, aby nastöpnie wyjadaè miñĔsz owocowy ze Ĉrodka, podczas gdy inne zlizujñ sok z uszkodzonego owocu. Ze wzglödu na fakt, Ĕe nietoperze owocowe odĔywiajñ siö nektarem, odgrywajñ doniosäñ rolö w rozmnaĔaniu roĈlin, poniewaĔ Ĉwietnie przenoszñ pyäki i nasiona. Orga- nizacja World Bat Sanctuary (ćwiatowe Sanktuarium Nietoperzy) szacuje, Ĕe okoäo 95 wszystkich nowo powstaäych lasów deszczowych wyrosäo dziöki aktywnoĈci wäaĈnie nietoperzy owocowych. Ta zaleĔnoĈè miödzy nietoperza- mi i roĈlinami jest formñ mutualizmu — interakcji biologicznej organizmów naleĔñcych do róĔnych gatunków, prowadzñcej do obopólnych korzyĈci — zwanñ w tym wypadku chiropterologiñ. Nietoperze owocoĔerne wystöpujñ praktycznie na caäym Ĉwiecie, jednakĔe ich ulubionym miejscem Ĕycia sñ ciepäe, tropikalne klimaty, bogate w owoce i kwiaty. ChociaĔ Ĉwietnie opanowaäy umiejötnoĈè latania, znane sñ ze swego niezdarnego lñdowania — czösto lñdujñ, rozbijajñc siö na drzewach, a gdy starajñ siö zatrzymaè, próbujñ chwyciè koþczyny stopami. Takie zachowanie utrwala bäödne przekonanie, Ĕe sñ Ĉlepe. W rzeczywistoĈci majñ jednak najlepszy wzrok spoĈród wszystkich nietoperzy, które muszñ polegaè jedynie na zmyĈle echolokacji. Nietoperze owoco- Ĕerne do zlokalizowania poĔywienia i nawigacji uĔywajñ wzroku oraz wöchu. Obrazek na okäadce ksiñĔki pochodzi z Cassell’s Natural History. Poleć książkęKup książkę
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Wyrażenia regularne. Wprowadzenie
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ą: