Wyrażenie regularne - Google

Wyrażenie regularne

Z Wikipedii

(Przekierowano z Wyrażenia regularne)
Skocz do: nawigacji, szukaj

Wyrażenia regularne (ang. regular expressions, w skrócie regex lub regexp) to wzorce, które opisują łańcuchy symboli. Zdaniem niektórych lepszym tłumaczeniem angielskiej nazwy byłoby wyrażenia regułowe ponieważ, chodzi tu nie o regularność, a o reguły opisywane tymi wyrażeniami. Obecna nazwa jest jednak mocno zakorzeniona w literaturze informatycznej. Teoria wyrażeń regularnych jest związana z teorią tzw. języków regularnych. Wyrażenia regularne mogą określać zbiór pasujących łańcuchów, mogą również wyszczególniać istotne części łańcucha.

Dwie najpopularniejsze składnie wyrażeń regularnych to składnia uniksowa i składnia perlowa. Składnia perlowa jest znacznie bardziej rozbudowana. Jest ona używana nie tylko w języku Perl, ale także w innych językach programowania: (Ruby), bibliotece PCRE do C i w narzędziu powłoki o nazwie pcregrep (znanego też jako pgrep). Perlową składnię stosuje się również w maskach przepisań mod_rewrite.

Spis treści

[edytuj] Elementy

Podstawowe elementy wyrażeń regularnych:

  • Każdy znak, oprócz znaków specjalnych, okreÅ›la sam siebie, np. a okreÅ›la Å‚aÅ„cuch zÅ‚ożony ze znaku a.
  • Kolejne symbole oznaczajÄ…, że w Å‚aÅ„cuchu muszÄ… wystÄ…pić dokÅ‚adnie te symbole w dokÅ‚adnie takiej samej kolejnoÅ›ci, np. ab oznacza że Å‚aÅ„cuch musi skÅ‚adać siÄ™ z litery a poprzedzajÄ…cej literÄ™ b.
  • Kropka . oznacza dowolny znak z wyjÄ…tkiem znaku nowego wiersza (zależnie od ustawieÅ„ i rodzaju wyrażeÅ„).
  • Znaki specjalne poprzedzone odwrotnym ukoÅ›nikiem \ powodujÄ…, że poprzedzanym znakom nie sÄ… nadawane żadne dodatkowe znaczenia i oznaczajÄ… same siebie, np. \. oznacza znak kropki (a nie dowolny znak).
  • Zestaw znaków miÄ™dzy nawiasami kwadratowymi oznacza jeden dowolny znak objÄ™ty nawiasami kwadratowymi, np. [abc] oznacza a, b lub c. Można używać także przedziałów: [a-c]. MiÄ™dzy nawiasami kwadratowymi:
    • Daszek ^ na poczÄ…tku zestawu oznacza wszystkie znaki oprócz tych z zestawu.
    • Aby uniknąć niejasnoÅ›ci, znaki - (łącznik) i ] (zamkniÄ™cie nawiasu kwadratowego) zapisywane sÄ… na skraju zestawu lub w niektórych systemach po znaku odwrotnego ukoÅ›nika, daszek zaÅ› wszÄ™dzie z wyjÄ…tkiem poczÄ…tku Å‚aÅ„cucha. Zasady te mogÄ… być różne w zależnoÅ›ci od konkretnej implementacji.
    • WiÄ™kszość znaków specjalnych w tym miejscu traci swoje znaczenie.
  • PomiÄ™dzy nawiasami okrÄ…gÅ‚ymi ( i ) grupuje siÄ™ symbole, do ich późniejszego wykorzystania.
  • Gwiazdka * po symbolu, (nawiasie, pojedynczym znaku) nazywana jest dopeÅ‚nieniem Kleene'a i oznacza zero lub wiÄ™cej wystÄ…pieÅ„ poprzedzajÄ…cego wyrażenia.
  • Znak zapytania ? po symbolu oznacza najwyżej jedno (być może zero) wystÄ…pienie poprzedzajÄ…cego wyrażenia.
  • Plus + po symbolu oznacza co najmniej jedno wystÄ…pienie poprzedzajÄ…cego go wyrażenia.
  • Daszek ^ oznacza poczÄ…tek wiersza, dolar $ oznacza koniec wiersza.
  • Pionowa kreska (ang. pipeline) | to operator OR np. jeÅ›li napiszemy a|b|c oznacza to, że w danym wyrażeniu może wystÄ…pić a lub b lub c.

[edytuj] Wyrażenia zachłanne (ang. greedy)

Kwantyfikatory w wyrażeniach regularnych dopasowują tak wiele znaków jak to możliwe – są to tzw. wyrażenia zachłanne (greedy - z ang. zachłanne, łapczywe). Może to być znaczącym problemem. Przykładowo, aby dopasować pierwszy element, znajdujący się w podwójnych nawiasach kwadratowych w tekście:

Kolejna eksplozja wieloryba nastąpiła na [[Tajwan]]ie, [[26 stycznia]] [[1990]].

użytkownik użyłby najchętniej wyrażenia (\[\[.*\]\]), które wygląda poprawnie (nawias kwadratowy powinien być interpretowany jako znak, dlatego poprzedzony jest odwrotnym ukośnikiem), jednak zwróci ciąg [[Tajwan]]ie, [[26 stycznia]] [[1990]] zamiast oczekiwanego [[Tajwan]].

Są dwie metody na uniknięcie tego problemu. Po pierwsze, zamiast określać co powinno być dopasowane, można określić co nie powinno być dopasowane, czyli w tym przypadku ] jest znakiem niepożądanym, więc wyrażenie miałoby postać (\[\[[^\]]*\]\]). Jednak nie uda się w ten sposób dopasować ciągu znaków w postaci:

A B C [[D E] F G]]

Drugą, bardziej współczesną metodą jest "zmuszenie" kwantyfikatora, aby nie był typu "greedy", poprzez dopisanie za nim znaku zapytania (\[\[.*?\]\]). Są to tak zwane "leniwe" (ang. lazy) odmiany kwantyfikatorów.

[edytuj] Rozszerzenia Perla

Rozszerzenia Perla to między innymi:

  • Negacja zestawu (wszystko, co nie należy do zestawu).
    • cyfry sÄ… zastÄ™powane znakami \d (dowolna cyfra) i \D (wszystko co nie jest cyfrÄ…)
    • znaki "biaÅ‚e" \s i \S (przeciwieÅ„stwo)
  • Rozszerzony zapis przedziałów, wprowadzenie klas znaków np.:
    • [:digit:] oznacza dowolnÄ… cyfrÄ™
    • [:alpha:] literÄ™
    • [:alnum:] literÄ™ lub cyfrÄ™
  • Możliwość precyzyjnego okreÅ›lenia liczby wystÄ…pieÅ„ danego wyrażenia
    • wyrażenie{N} oznacza dokÅ‚adnie N wystÄ…pieÅ„
    • wyrażenie{N,} co najmniej N wystÄ…pieÅ„ wyrażenia
    • wyrażenie{,M} co najwyżej M wystÄ…pieÅ„ wyrażenia
    • wyrażenie{N,M} od N do M wystÄ…pieÅ„ wyrażenia
  • Referencje wsteczne, czyli możliwość odwoÅ‚ywania siÄ™ do odnalezionych podciÄ…gów zgrupowanych poprzez nawiasy. Np. w wyrażeniu "(.*)\1" referencjÄ… wstecznÄ… jest "\1" i oznacza powtórzenie ciÄ…gu znalezionego w ramach pierwszej grupy nawiasów. To rozszerzenie wyprowadza akceptowane Å‚aÅ„cuchy poza klasÄ™ jÄ™zyków regularnych.

[edytuj] Bibliografia

  1. Jeffrey E.F. Friedl: Wyrażenia regularne. Gliwice: Helion O`REILLY [1], 06 2001. ISBN 83-7197-351-9. "Wyrażenia regularne to idea, wykorzystywana w różny sposób w różnych narzÄ™dziach (narzÄ™dzi tych jest o wiele wiÄ™cej, niż opisano w tej książce). JeÅ›li opanuje siÄ™ już ogólnÄ… sztukÄ™ wyrażeÅ„ regularnych, opanowanie konkretnej ich implementacji nie bÄ™dzie stanowiÅ‚o jakiegokolwiek problemu". 
  2. Tony Stubblebine: Wyrażenia regularne leksykon kieszonkowy Wydanie I. Gliwice: Helion O`REILLY, 12 2003. ISBN 83-7361-075-8. 
  3. Tony Stubblebine: Wyrażenia regularne leksykon kieszonkowy Wydanie II. Gliwice: Helion O`REILLY, 01 2008. ISBN 978-83-246-1392-2. 

[edytuj] Zobacz też

[edytuj] Linki zewnętrzne

[edytuj] Przypisy

  1. ↑ Authorized translation of the English edition O`REILLY & Assaociates

Niemcy: niedorzeczne plotki na temat Beenhakkera
Niemcy robią wszystko, żeby podgrzać atmosferę przed meczem z Polską. Szkoda tylko, że chwytają się coraz brudniejszych sztuczek. Najpierw kij w mrowisko włożyli działacze Borussii Dortmund, twierdząc, że chcą zatrudnić Leo po mistrzostwach. Potem "Sport Bild" zamieścił wywiad z Beenhakkerem, w którym - jak twierdzi Holender - przekręcono jego słowa. Teraz w Niemczech szuka się dowodu na to, że nasz selekcjoner ma w Polsce romans!
Kriżanac: urządziliśmy ostry bal
Piłkarze Zenitu świętują zdobycie Pucharu UEFA na całego. Rosjanie pewnie pokonali Glasgow Rangers 2:0, a jednym z najlepszych piłkarzy na boisku był obrońca mistrza Rosji Ivica Kriżanac, były gwiazdor Górnika Zabrze i Groclinu Dyskobolii.
Michalczewski o geście Rogera: to jest gość
- Dla mnie to jest gość. Pełen szacunek - tak decyzję Rogera o przekazaniu luksusowego auta na rzecz chorych dzieci komentuje Dariusz "Tiger" Michalczewski.
Los piłkarza Legii zależy między innymi od Smolarka
W najbliższą niedzielę rozstrzygnie się, który zespół spadnie z ligi hiszpańskiej. Co to ma wspólnego z Legią Warszawa? Wbrew pozorom, bardzo dużo. Od rozstrzygnięć w Primera Division zależy przyszłość Inakiego Astiza.
Polska straciła wielki talent
W wieku 12 lat Caroline Woźniacki mogła reprezentować nasz kraj. Polski Związek Tenisowy nie był jednak zainteresowany. 17-letnia zawodniczka gra więc z powodzeniem dla Danii.
Linki: Strona g³ówna