Page 1


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 TRECI

Wprowadzenie ........................................................................................... 7 1. Czym s wyraenia regularne? ..................................................... 13 Poznaj aplikacj RegexPal Dopasowanie numeru telefonu w formacie stosowanym w Ameryce Pónocnej Dopasowanie cyfr za pomoc klasy znaków Uywanie znaków skrótów Dopasowanie dowolnego znaku Grupy przechwytywania i odwoania wsteczne Uywanie kwantyfikatorów Uywanie dosownych znaków Przykady aplikacji Czego dowiedziae si z rozdziau 1.? Informacje techniczne

14 16 17 18 19 19 20 21 23 25 26

2. Proste dopasowanie wzorca ......................................................... 27 Dopasowanie dosownego cigu tekstowego Dopasowanie cyfr Dopasowanie znaków innych ni cyfry Dopasowanie sów i znaków niebdcych sowami Dopasowanie znaku niewidocznego Dopasowanie dowolnego znaku, po raz kolejny

29 30 32 32 35 37

3

Kup książkę

Poleć książkę


Oznaczanie tekstu Czego dowiedziae si z rozdziau 2.? Informacje techniczne

39 43 44

3. Granice ...........................................................................................47 Pocztek i koniec wiersza Granice sowa i niesowa Inne kotwice Okrelenie grupy znaków jako dosownych Dodawanie znaczników Czego dowiedziae si z rozdziau 3.? Informacje techniczne

47 49 52 53 54 58 59

4. Alternatywy, grupy i odniesienia ................................................. 61 Alternatywy Podwzorce Grupy przechwytywania i odwoania wsteczne Grupy nieprzechwytujce Czego dowiedziae si z rozdziau 4.? Informacje techniczne

62 65 67 70 73 73

5. Klasy znaków ................................................................................. 75 Negacja klasy znaków Zczenia i rónice Klasy znaków POSIX Czego dowiedziae si z rozdziau 5.? Informacje techniczne

77 77 80 82 82

6. Dopasowanie Unicode i innych znaków .......................................83 Dopasowanie znaku Unicode Dopasowanie znaków liczb ósemkowych Dopasowanie waciwoci znaku Unicode Dopasowanie znaków kontrolnych Czego dowiedziae si z rozdziau 6.? Informacje techniczne

4

_

84 88 88 92 94 94

Spis treci

Kup książkę

Poleć książkę


7. Kwantyfikatory .............................................................................. 97 Zachanne, leniwe i zaborcze Dopasowanie za pomoc *, + oraz ? Dopasowanie okrelon liczb razy Kwantyfikatory leniwe Kwantyfikatory zaborcze Czego dowiedziae si z rozdziau 7.? Informacje techniczne

98 99 100 101 103 104 104

8. Przewidywania ............................................................................ 105 Przewidywanie pozytywne Przewidywania negatywne Pozytywne przewidywanie wsteczne Negatywne przewidywanie wsteczne Czego dowiedziae si z rozdziau 8.? Informacje techniczne

105 108 109 109 110 110

9. Dodawanie znaczników HTML5 do dokumentu ......................... 111 Dopasowanie znaczników Transformacja zwykego tekstu za pomoc narzdzia sed Dodawanie znaczników Transformacja zwykego tekstu za pomoc jzyka Perl Czego dowiedziae si z rozdziau 9.? Informacje techniczne

112 113 117 119 125 125

10. To ju koniec ................................................................................ 127 Dalsza nauka Wane narzdzia, implementacje i biblioteki Dopasowanie numeru telefonu w formacie stosowanym w Ameryce Pónocnej Dopasowanie adresu e-mail Czego dowiedziae si z rozdziau 10.?

129 129 132 133 134

A Odniesienia do wyrae regularnych ......................................... 135 B Sownik wyrae regularnych .................................................... 153 Skorowidz ............................................................................................... 163 Spis treci

Kup książkę

_

Poleć książkę

5


6

_

Spis treci

Kup książkę

Poleć książkę


ROZDZIA 4.

Alternatywy, grupy i odniesienia

Miae ju okazj zobaczy grupy w dziaaniu. Tekst grupy znajduje si w nawiasie, a sama grupa ma za zadanie pomóc w wykonywaniu pewnych operacji, na przykad w: x obsudze alternatywy, czyli wyborze midzy co najmniej dwoma opcjo-

nalnymi wzorcami; x tworzeniu podwzorców; x przechwytywaniu grupy w celu póniejszego odniesienia si do niej

za pomoc odwoania wstecznego; x zastosowaniu pewnej operacji do zgrupowanego wzorca, przykadowo

kwantyfikatora; x uywaniu grup nieprzechwytujcych; x uywaniu grup niepodzielnych (temat zaawansowany).

Oprócz tekstu The Rime of the Ancyent Mariner z pliku rime.txt w tym rozdziale zostanie przedstawionych take kilka innych przykadów. Bd uywa biurowej wersji aplikacji RegExr oraz innych narzdzi, na przykad sed. Biurow wersj aplikacji RegExr dla systemów Windows, Mac i Linux moesz pobra z strony http://www.gskinner.com/RegExr/desktop/ (aplikacja zostaa utworzona w technologii Adobe AIR). Wicej informacji znajdziesz na wskazanej stronie.

61

Kup książkę

Poleć książkę


Alternatywy Ujmujc rzecz najprociej, alternatywa pozwala na wybór wzorców do dopasowania. Przyjmujemy zaoenie, e chcesz si dowiedzie, ile razy sowo the wystpuje w utworze The Rime of the Ancyent Mariner. Problem polega na tym, e to sowo jest w utworze pisane w postaci THE, The i the. Rozwizaniem problemu jest wówczas uycie alternatywy. Uruchom biurow wersj aplikacji RegExr, dwukrotnie klikajc jej ikon. Aplikacja wyglda niemal tak samo jak wersja sieciowa, ale ma t zalet, e dziaa na komputerze lokalnym niezalenie od ewentualnych problemów zwizanych z sieci, które czasem pojawiaj si podczas uywania aplikacji sieciowych. Na potrzeby omawianego wiczenia skopiowaem cay utwór z pliku rime.txt, a nastpnie wkleiem go w aplikacji RegExr. Uywana przeze mnie wersja systemu to Mac OS X 10.7 (Lion). W górnym polu tekstowym aplikacji wprowad wyraenie regularne: (the|The|THE)

które spowoduje podwietlenie w dolnym polu tekstowym wszystkich wystpie sowa the w utworze (zobacz rysunek 4.1). Aby zobaczy kolejne podwietlone wystpienia sowa the w tekcie docelowym, uyj przycisków przewijania.

Rysunek 4.1. Uycie alternatywy w biurowej wersji aplikacji RegExr

62

_

Rozdzia 4. Alternatywy, grupy i odniesienia

Kup książkę

Poleć książkę


Istnieje moliwo skrócenia przedstawionej grupy poprzez zastosowanie opcji. Opcje pozwalaj na okrelenie, jak ma by przeprowadzone wyszukiwanie wzorca. Przykadowo opcja: (?i)

powoduje, e wzorzec nie rozrónia wielkoci liter. Dlatego te zamiast pierwotnego wzorca alternatywy moemy uy poniszego: (?i)the

Wypróbuj to wyraenie regularne w aplikacji RegExr i przekonaj si, jaki bdzie wynik jego dziaania. Ignorowanie wielkoci liter mona wczy take 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 wyrae regularnych Opcja

Opis

Obsugiwana przez

(?d)

Wiersze w systemie Unix

Java

(?i)

Wielko liter

PCRE, Perl, Java

(?J)

Zezwolenie na duplikaty

PCRE1

(?m)

Multiline

PCRE, Perl, Java

(?s)

Pojedynczy wiersz (dotall)

PCRE, Perl, Java

(?u)

Wielko liter w Unicode

Java

(?U)

Domylne dopasowanie leniwe

PCRE

(?x)

Ignoruj znaki niewidoczne i komentarze

PCRE, Perl, Java

(?-…)

Wczenie lub wyczenie opcji

PCRE

Teraz uyjemy alternatywy podczas pracy z narzdziem grep . Warto w tym miejscu wspomnie, e opcje wymienione w tabeli 4.1 nie dziaaj z narzdziem grep, wic konieczne bdzie uycie pierwotnego wzorca alternatywy. Aby obliczy liczb wierszy, w których sowo the zapisane za pomoc znaków o dowolnej wielkoci wystpuje przynajmniej jeden raz, wydaj nastpujce polecenie: grep -Ec "(the|The|THE)" rime.txt

Otrzymane dane wyjciowe s proste: 327

1

Zobacz sekcj „Named Subpatterns” na stronie http://www.pcre.org/pcre.txt.

Alternatywy

Kup książkę

_

Poleć książkę

63


Wynik nie mówi wszystkiego, ale o tym za chwil. Oto dokadna analiza wydanego polecenia narzdzia grep: x opcja -E oznacza uycie rozszerzonych wyrae regularnych (ERE) za-

miast zwykych (BRE), dziki czemu unikasz koniecznoci poprzedzania ukonikami nawiasów i pionowych kresek, jak ma to miejsce w przypadku wyrae BRE, na przykad \(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 moliwoci zapisu sprawdzane

od lewej do prawej strony. Ponisze polecenie zwróci wszystkie wystpienia wskazanego sowa, wiersz po wierszu: grep -Eo "(the|The|THE)" rime.txt | wc -l

Dane wyjciowe wykonanego polecenia to: 412

A oto jego dokadne omówienie: x opcja -o oznacza wywietlenie jedynie tej czci wiersza, która zostaa

dopasowana do wzorca — w omawianym przykadzie dane nie bd jednak wywietlone na ekranie, poniewa s potokowane (|) do polecenia wc; x w omawianym kontekcie pionowa kreska powoduje przekazanie da-

nych wyjciowych narzdzia grep jako danych wejciowych polecenia wc — polecenie wc oblicza liczb sów, natomiast jego opcja -l zlicza liczb wierszy danych wejciowych. Skd wzia si tak dua rónica: jedno polecenie zwraca 327 wystpie , natomiast drugie 412? Odpowied jest prosta: poniewa opcja -c podaje liczb dopasowanych wierszy, a przecie w wierszu moe znajdowa si wicej ni tylko jedno wystpienie szukanego sowa. Jeeli uyjemy opcji -o wraz z wc -l, wówczas kade wystpienie sowa w dowolnej formie (wielko znaków) zostanie umieszczone w oddzielnym wierszu i zliczone, co da w efekcie liczb 412. To samo zadanie, ale wykonane za pomoc jzyka Perl, wymaga uycia poniszego polecenia: perl -ne 'print if /(the|The|THE)/' rime.txt

64

_

Rozdzia 4. Alternatywy, grupy i odniesienia

Kup książkę

Poleć książkę


Jeszcze lepszym rozwizaniem bdzie uycie wspomnianej wczeniej opcji (?i), ale bez alternatywy: perl -ne 'print if /(?i)the/' rime.txt

Jednak najlepsze rozwizanie polega na dodaniu modyfikatora i po ostatnim ograniczniku wzorca: perl -ne 'print if /the/i' rime.txt

Po wykonaniu powyszych polece otrzymasz takie same dane wyjciowe jak wczeniej. Im prostsze podejcie, tym lepiej. List innych modyfikatorów (nazywanych take flagami) przedstawiono w tabeli 4.2. Porównaj te opcje (podobne, ale stosujce inn skadni) wymienione w tabeli 4.1. Tabela 4.2. Modyfikatory (flagi) w jzyku Perl2 Modyfikator

Opis

a

Dopasowanie \d, \s, \w i POSIX jedynie w zakresie ASCII

c

Zachowaj biece pooenie, jeli próba dopasowania zakoczy si niepowodzeniem

d

Uyj domylnych, rodzimych regu uywanego systemu

g

Dopasowanie globalne

i

Dopasowanie bez uwzgldnienia wielkoci liter

l

Uycie regu ustawie regionalnych uytkownika

m

Cigi tekstowe obejmujce wiele wierszy

p

Zachowanie dopasowanego cigu tekstowego

s

Traktowanie cigów tekstowych jako pojedynczego wiersza

u

Uycie regu Unicode podczas dopasowania

x

Ignorowanie znaków niewidocznych i komentarzy

Podwzorce Bardzo czsto, odwoujc si do podwzorców w wyraeniach regularnych, odnosimy si do grupy lub grup wewntrz innych grup. Podwzorzec jest wic wzorcem w innym wzorcu. Czsto zdarza si, e warunek zawarty w podwzorcu jest moliwy do spenienia po dopasowaniu wczeniejszego wzorca, ale to nie jest regu. Podwzorce mona tworzy na wiele rónych sposobów. W tym podrozdziale skoncentrujemy si przede wszystkim na podwzorcach definiowanych przez uycie nawiasów. 2

Zobacz http://perldoc.perl.org/perlre.html#Modifiers.

Podwzorce

Kup książkę

_

Poleć książkę

65


W pewnym sensie uyty we wczeniejszej czci rozdziau wzorzec: (the|The|THE)

ma trzy podwzorce: pierwszy to the, drugi to The, a trzeci to THE. W omawianym przypadku dopasowanie na przykad drugiego podwzorca zupenie nie zaley od dopasowania pierwszego. (Jako pierwszy zostanie dopasowany wzorzec pierwszy z lewej strony). Poniej wida przykad podwzorców, których dopasowanie zaley od dopasowania wczeniejszego wzorca: (t|T)h(e|eir)

To wyraenie regularne powoduje dopasowanie dosownych znaków t lub T, nastpnie h, a dalej litery e lub liter eir. Dlatego te moe dopasowa dowolne z poniszych sów: x the x The x their x Their

W tym przypadku drugi podwzorzec (e|eir) jest zaleny od pierwszego (t|T). Podwzorce nie wymagaj uywania nawiasów. Poniej przedstawiono definicj podwzorców, do której utworzenia wykorzystano klasy znaków: \b[tT]h[ceinry]*\b

Powysze wyraenie regularne moe dopasowa oprócz sów the lub The take thee, thy i thence. Dwa wyraenia granicy sowa (\b) powoduj, e bdzie ono dopasowywao cae sowa, a nie litery znajdujce si w innych sowach. Oto dokadne omówienie przedstawionego wyraenia regularnego: x wyraenie \b powoduje dopasowanie granicy pocztku sowa; x [tT] to klasa znaków powodujca dopasowanie maej litery t lub duej

litery T — ten fragment wyraenia regularnego moemy uzna za podwzorzec; x nastpnie 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 * okrelajcy dopasowanie zero lub wicej razy; x na ko cu wyraenia regularnego mamy kolejne dopasowanie granicy

sowa \b.

66

_

Rozdzia 4. Alternatywy, grupy i odniesienia

Kup książkę

Poleć książkę


Jednym z bardziej interesujcych aspektów wyrae regularnych jest to, e stosowana terminologia moe by blisko zwizana ze znaczeniem danej operacji lub wrcz przeciwnie. Decydujc si na uycie terminu podwzorzec oraz innych w niniejszej ksice, przeanalizowaem wiele róde i spróbowaem je wszystkie poczy. Na pewno znajd si Czytelnicy, którzy bd si upiera, e klasa znaków nie jest podwzorcem. Uwaam, e skoro klasy znaków mog dziaa tak jak podwzorce, to mog je wrzuci do jednego worka.

Grupy przechwytywania i odwoania wsteczne Kiedy wzorzec grupuje ca tre lub jej cz w nawiasach, wówczas przechwytuje t tre i przechowuje j tymczasowo w pamici. Nastpnie, jeli chcesz, moesz ponownie wykorzysta t tre, uywajc odwoania wstecznego w postaci: \1

lub: $1

przy czym \1 lub $1 odwouj si do pierwszej grupy przechwytywania, \2 lub $2 — do drugiej itd. Narzdzie sed akceptuje jedynie posta \1, natomiast jzyk Perl dopuszcza obie. Pocztkowo narzdzie sed obsugiwao odwoania wsteczne w zakresie od \1 do \9, ale takie ograniczenie ju nie istnieje.

Odwoania wsteczne ju widziae w dziaaniu, ale przedstawi je raz jeszcze. W omawianym przykadzie wykorzystamy je do zmiany kolejnoci sów w wierszu utworu, za co przepraszam Samuela Taylora Coleridge’a. W aplikacji RegExr kliknij kart Replace, a nastpnie w górnym polu tekstowym wprowad wzorzec: (It is) (an ancyent Marinere)

Przewijaj trzecie pole tekstowe zawierajce tekst docelowy, a zobaczysz podwietlony wiersz, a póniej w drugim polu tekstowym wprowad takie wyraenie: $2 $1

Grupy przechwytywania i odwoania wsteczne

Kup książkę

_

Poleć książkę

67


W dolnym polu tekstowym zobaczysz, e sowa w podwietlonym wierszu zostay zamienione miejscami (spójrz na rysunek 4.2). an ancyent Marinere It is,

Rysunek 4.2. Odwoania wsteczne za pomoc wyrae $1 i $2

Ponisze polecenie pozwala na wykonanie tego samego zadania, ale za pomoc narzdzia sed: sed -En 's/(It is) (an ancyent Marinere)/\2 \1/p' rime.txt

Otrzymane dane wyjciowe polecenia s nastpujce: an ancyent Marinere It is,

Wynik operacji jest wic dokadnie taki sam, jak uzyskany w aplikacji RegExr. Poniej przedstawiono dokadne omówienie dziaania wywoania narzdzia sed. Dziki temu moesz dobrze zrozumie, jak naprawd dziaa omawiane polecenie. x opcja -E powoduje uycie rozszerzonych wyrae regularnych (ERE),

co zwalnia Ci na przykad z koniecznoci poprzedzania nawiasów ukonikami; x opcja -n zawiesza zachowanie domylne polegajce na wywietleniu

kadego wiersza;

68

_

Rozdzia 4. Alternatywy, grupy i odniesienia

Kup książkę

Poleć książkę


x polecenie zastpowania powoduje wyszukanie dopasowanego tekstu

It is an ancyent Marinere i przechwytuje go w dwóch grupach; x polecenie zastpowania powoduje take zmian kolejnoci sów w do-

pasowanym tekcie, uywajc do tego odwoa wstecznych: najpierw \2, a póniej \1; x opcja p na ko cu polecenia zastpowania oznacza wywietlenie zmo-

dyfikowanego wiersza. Polecenie w jzyku Perl wykonujce takie samo zadanie ma posta: perl -ne 'print if s/(It is) (an ancyent Marinere)/\2 \1/' rime.txt

Zwró uwag na uycie skadni w stylu \1. Oczywicie masz równie moliwo uycia skadni $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 wywietlenie wskazanego wiersza. Chciabym jeszcze zwróci uwag na jedn rzecz w wywietlonych danych wyjciowych: an ancyent Marinere It is,

Podczas transformacji zostaa zachowana wielko liter. Perl pozwala rozwiza ten problem dziki uyciu \u i \l: perl -ne 'print if s/(It is) (an ancyent Marinere)/\u$2 \l$1/' rime.txt

Teraz otrzymane dane wyjciowe przedstawiaj si znacznie lepiej: An ancyent Marinere it is,

Oto dokadne omówienie dziaania wyrae \u i \l: x skadnia \l nie dopasowuje adnego znaku, ale zmienia znajdujcy si

po niej znak na may; x skadnia \u zmienia znajdujcy si po niej znak na wielki; x dyrektywa \U (nieuyta w przykadzie) zmienia cay cig tekstowy

znajdujcy si po niej na zapisany wielkimi literami; x dyrektywa \L (nieuyta w przykadzie) zmienia cay cig tekstowy

znajdujcy si po niej na zapisany maymi literami. Wymienione dyrektywy dziaaj a do wystpienia kolejnej (w przypadku \l lub \E do ko ca cigu tekstowego). Poeksperymentuj z nimi i przekonaj

si, jaki jest ich sposób dziaania.

Grupy przechwytywania i odwoania wsteczne

Kup książkę

_

Poleć książkę

69


Nazwane grupy Nazwane grupy to po prostu grupy przechwytywania wraz ze zdefiniowanymi nazwami. Dostp do takich grup odbywa si poprzez ich nazwy, a nie liczby. Oto sposób uycia nazwanych grup w jzyku Perl: perl -ne 'print if s/(?<one>It is) (?<two>an ancyent Marinere)/\u$+{two} \l$+{one}/' rime.txt

Powysze polecenie dziaa nastpujco: x dodanie ?<one> i ?<two> w nawiasach powoduje zdefiniowanie nazw

dla danych grup, odpowiednio one i two; x $+{one} odwouje si do grupy o nazwie one, natomiast $+{two} — do

grupy o nazwie two. Nazwanych grup mona równie uywa wewntrz wzorca, w którym zostay nazwane. Poniej wyjani Ci, co to oznacza. Przyjmujemy zaoenie, e szukany jest cig tekstowy skadajcy si z szeciu zer: 000000

To nacigany przykad, ale ma za zadanie jedynie zademonstrowa sposób dziaania. Grup trzech zer w podanym wzorcu nazywamy z (mona uy dowolnej nazwy): (?<z>0{3})

Nastpnie tak nazwanej grupy mona uy 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 powysze wyraenia regularne w aplikacji RegExr i przekonaj si, jaki jest wynik ich dziaania. W tabeli 4.3 wymieniono wiele przykadów skadni odwoywania si do nazwanych grup.

Grupy nieprzechwytujce Istniej równie tak zwane grupy nieprzechwytujce, to znaczy takie, które nie przechowuj swojej zawartoci w pamici. Czasami takie rozwizanie bdzie zalet, zwaszcza jeli nigdy nie masz zamiaru odwoa si do grupy.

70

_

Rozdzia 4. Alternatywy, grupy i odniesienia

Kup książkę

Poleć książkę


Tabela 4.3. Skadnia nazwanych grup Skadnia

Opis

(?<nazwa>...)

Nazwana grupa

(?nazwa...)

Inna nazwana grupa

(?P<nazwa>...)

Nazwana grupa (w jzyku Python)

\k<nazwa>

Odniesienie poprzez nazw (w jzyku Perl)

\k'nazwa'

Odniesienie poprzez nazw (w jzyku Perl)

\g{nazwa}

Odniesienie poprzez nazw (w jzyku Perl)

\k{nazwa}

Odniesienie poprzez nazw (w jzykach .NET)

(?P=nazwa)

Odniesienie poprzez nazw (w jzyku Python)

Poniewa grupa nie przechowuje swojej treci, jej dziaanie moe charakteryzowa si wiksz wydajnoci. Jednak w przypadku tak prostych przykadów jak prezentowane w niniejszej ksice kwestie zwizane z wydajnoci nie wystpuj. Pamitasz pierwsz grup przedstawion w tym rozdziale? Dla przypomnienia: (the|The|THE)

Poniewa nie ma potrzeby odwoywania si do powyszej grupy, mona j zdefiniowa jako grup nieprzechwytujc. Wymaga to wyraenia regularnego w nastpujcej postaci: (?:the|The|THE)

Opierajc si na materiale przedstawionym na pocztku rozdziau, powysze wyraenie mona uzupeni o opcj powodujc, e wzorzec nie rozrónia wielkoci liter (chocia w przypadku tej grupy nie trzeba dodawa wymienionej opcji): (?i)(?:the)

Inny sposób: (?:(?i)the)

Najlepiej jednak uy poniszego zapisu: (?i:the)

Litera i opcji moe zosta umieszczona pomidzy znakiem zapytania i dwukropkiem.

Grupy nieprzechwytujce

Kup książkę

_

Poleć książkę

71


Grupy niepodzielne Inny rodzaj grupy nieprzechwytujcej to tak zwana grupa niepodzielna. Jeeli korzystasz z silnika wyrae regularnych obsugujcego sprawdzanie wsteczne (ang. backtracking), taka grupa spowoduje wyczenie sprawdzania wstecznego, ale nie w przypadku silnika wyrae regularnych, lecz tylko w odniesieniu do czci wyraenia ujtej w grupie niepodzielnej. Skadnia przedstawia si tak: (?>the)

Do czego mog suy grupy niepodzielne? Jednym z czynników, który moe naprawd spowolni przetwarzanie wyraenia regularnego, jest wanie sprawdzanie wsteczne. Powód jest prosty: sprawdzenie wszystkich moliwoci wymaga czasu i zasobów komputera. Czasami przetworzenie wyraenia regularnego moe pochon naprawd ogromn ilo czasu. Kiedy sytuacja staje si powana, uywane jest okrelenie katastrofalne sprawdzanie wsteczne. Sprawdzanie wsteczne mona wyczy, uywajc silnika wyrae regularnych pozbawionego jego obsugi, na przykad re2 (http://code.google.com/ p/re2/), lub wyczajc sprawdzanie wsteczne dla fragmentów wyraenia regularnego przez uycie grup niepodzielnych. W niniejszej ksice skoncentrowaem si na przedstawieniu skadni, dlatego niewiele miejsca powic na omówienie zagadnie optymalizacji prowadzcej do zwikszenia wydajnoci dziaania wyrae regularnych. Z mojego punktu widzenia grupy podzielne s stosowane przede wszystkim ze wzgldu na wydajno.

Z rozdziau 5. dowiesz si wicej na temat klas znaków.

72

_

Rozdzia 4. Alternatywy, grupy i odniesienia

Kup książkę

Poleć książkę


Czego dowiedziae si z rozdziau 4.? x Alternatywa pozwala na wybranie z dwóch lub wikszej liczby wzorców. x Czym s modyfikatory oraz jak mona ich uywa we wzorcach? x Jakie s rodzaje podwzorców? x Jak uywa grup przechwytywania oraz odwoa wstecznych? x Jak uywa nazwanych grup oraz jak odwoywa si do nich? x Jak uywa grup nieprzechwytujcych? 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 dziaajcych jako samodzielne aplikacje po stronie klienta bez koniecznoci uywania przegldarki internetowej do ich uruchamiania. Wicej 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 jzyk pro-

gramowania wysokiego poziomu. Python zawiera implementacj wyrae 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 wyrae regularnych (zobacz http://msdn.microsoft.com/en-us/library/hs600312.aspx). x Bardziej zaawansowane objanienie 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

Kup książkę

_

Poleć książkę

73


74

_

Rozdzia 4. Alternatywy, grupy i odniesienia

Kup książkę

Poleć książkę


SKOROWIDZ

$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

[[: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

Kup książkę

Poleć książkę


\V, 36 \w, 32, 34 \W, 33, 34 \x xx, 34 \z, 52 \Z, 52 +, znak, 20

A ack, narzdzie, 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 dugoci, 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

_

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 niesowo, 33, 34 niewidoczny, znak, 35 nowy wiersz, znak, 35, 36 null, znak, 34, 92 numer telefonu, 132 okrelon liczb razy, 100 pionowy tabulator, 36 pocztek i koniec wiersza, 47, 48 powrót na pocztek wiersza, znak, 35, 36 poziomy tabulator, 36 poziomy znak niewidoczny, 36 sowo, 32, 34 spacja, 36 tabulator, 35 Unicode, 34, 84 warto dziesitna znaku, 34 warto ósemkowa znaku, 34 warto szesnastkowa znaku, 34 wysunicie strony, znak, 36 zaborcze, 154 zachanne, 154 znaczniki, 112 dosowny cig tekstowy, 17, 29, 154

E echo, polecenie, 40 ed, edytor, 154 egrep, narzdzie, 155 e-mail, dopasowanie, 133 ERE, 51, 154, 158 Esc, dopasowanie, 93

Skorowidz

Kup książkę

Poleć książkę


F fgrep, narzdzie, 155 flaga, Patrz modyfikator fragment, 154

G ga, 155 Git, 44 GitHub, 44 granice, Patrz kwantyfikatory grep, narzdzie, 51, 59, 155 grupy, 155 niepodzielne, 72, 155 nieprzechwytujce, 70, 155 przechwytywania, 19, 67, 155 gwiazda Kleene'a, 99 gwiazdka, znak, 20

H HTML5, 44

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 zachanne, 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 niesowo 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 odwoania wsteczne, 19, 67, 157 ograniczone wystpienia, Patrz kwantyfikatory Oniguruma, 131 opcje, 146, 157 Opera Next, 82 Oxygen, edytor, 24, 26

Skorowidz

Kup książkę

_

Poleć książkę

165


P PCRE, 59, 130 pcregrep, 52, 130 Perl, 42, 43, 45, 130, 157 dodawanie znaczników, 57, 119 modyfikatory, 65, 146 obsuga liczb rzymskich, 122 obsuga wierszy, 122 plik polece , 123 perldoc, 126 pionowy tabulator, dopasowanie, 36 plus, znak, 20 podstawowe wyraenia 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 wyraenia regularne, 136

R Rackham, Stuart, 125 RE2, 132 Regex Hero, aplikacja, 85, 94 RegexPal, 14, 15, 26

166

_

RegExr, 27, 28, 44 dodawanie znaczników, 54, 55 Reggy, aplikacja, 78, 82 rozszerzone wyraenia regularne, Patrz ERE Rubular, aplikacja, 80, 82 Ruby, 131

S sed, narzdzie, 40, 44, 159 dodawanie znaczników, 55, 56, 113 obsuga liczb rzymskich, 115 obsuga wierszy, 116 plik polece , 118 zastpowanie znaków, 114 Skinner, Grant, 27 sowo 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 waciwoci znaku, 88, 90, 91 utrzymywana przestrze , 160 utrzymywany bufor, Patrz utrzymywana przestrze

Skorowidz

Kup książkę

Poleć książkę


V vi, edytor, 51, 59, 160 vim, edytor, 51, 59, 94, 160 dopasowanie znaku Unicode, 87

W Wall, Larry, 42 warto dziesitna znaku, dopasowanie, 34 warto ósemkowa znaku, dopasowanie, 34 warto szesnastkowa znaku, dopasowanie, 34 wiersz, pocztek i koniec, 47, 48 waciwoci znaku, 142, 143 wyraenia regularne, 7, 13, 161 opcje, 63 wyraenia w nawiasach, Patrz klasy znaków wzorce, 27

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 pocztek wiersza, dopasowanie, 35, 36 znak sterujcy, 18, 161 znak wysunicia strony, dopasowanie, 36 znak zapytania, 20 znaki skrótów, 14, 18, 138 dla znaków niewidocznych, 36, 139 lista, 34

Z zakres, 31 skadnia, 101 zestaw znaków, 17, 77, 161 znaczniki, dopasowanie, 112

Skorowidz

Kup książkę

_

Poleć książkę

167


O autorze Michael Fitzgerald to programista i konsultant, napisa 10 ksiek technicznych dla wydawnictw O’Reilly oraz John Wiley & Sons, jak równie kilka artykuów dla serwisu O’Reilly Network. By take czonkiem komisji, która opracowaa RELAX NG, czyli jzyk schematów do jzyka XML.

Kolofon Zwierz na okadce ksiki Wyraenia regularne. Wprowadzenie to nietoperz owocowy. Nietoperz owocowy naley do podrzdu nietoperzy owocoernych (Megachiroptera) i rodziny rudawkowatych (Pteropodidae), bywa równie nazywany latajcym lisem lub latajcym psem. Pomimo swojej nazwy poszczególne osobniki wchodzce w skad caej rodziny rudawkowatych mog znacznie róni si rozmiarem ciaa — najmniejszy przedstawiciel mierzy zaledwie sze centymetrów, podczas gdy inny osobnik moe way okoo kilograma, a rozpito skrzyde moe wynosi nawet okoo pótora metra. Jednak zgodnie ze swoj nazw nietoperze owocowe, tak jak i inne nietoperze owocoerne, odywiaj si albo owocami, albo nektarem kwiatowym. Niektóre przegryzaj zbami skórk owocow, aby nastpnie wyjada misz owocowy ze rodka, podczas gdy inne zlizuj sok z uszkodzonego owocu. Ze wzgldu na fakt, e nietoperze owocowe odywiaj si nektarem, odgrywaj donios rol w rozmnaaniu rolin, poniewa wietnie przenosz pyki i nasiona. Organizacja World Bat Sanctuary ( wiatowe Sanktuarium Nietoperzy) szacuje, e okoo 95% wszystkich nowo powstaych lasów deszczowych wyroso dziki aktywnoci wanie nietoperzy owocowych. Ta zaleno midzy nietoperzami i rolinami jest form mutualizmu — interakcji biologicznej organizmów nalecych do rónych gatunków, prowadzcej do obopólnych korzyci — zwan w tym wypadku chiropterologi. Nietoperze owocoerne wystpuj praktycznie na caym wiecie, jednake ich ulubionym miejscem ycia s ciepe, tropikalne klimaty, bogate w owoce i kwiaty. Chocia wietnie opanoway umiejtno latania, znane s ze swego niezdarnego ldowania — czsto lduj, rozbijajc si na drzewach, a gdy staraj si zatrzyma, próbuj chwyci ko czyny stopami. Takie zachowanie utrwala bdne przekonanie, e s lepe. W rzeczywistoci maj jednak najlepszy wzrok sporód wszystkich nietoperzy, które musz polega jedynie na zmyle echolokacji. Nietoperze owocoerne do zlokalizowania poywienia i nawigacji uywaj wzroku oraz wchu. Obrazek na okadce ksiki pochodzi z Cassell’s Natural History.

Kup książkę

Poleć książkę


Wyra enia regularne. Wprowadzenie  
Advertisement
Read more
Read more
Similar to
Popular now
Just for you