Wyrażenia regularne. Regular expressions. aka. Regexp

Podobne dokumenty
Wyrażenia regularne. Wyrażenia regularne 1/41

Języki formalne i automaty Ćwiczenia 6

Wyrażenia regularne. Wyrażenia regularne: składnia

Jerzy Nawrocki, Wprowadzenie do informatyki

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Wyrażenia regularne. Wojciech Tabiś Łukasz Jankowski

Wyrażenie wewnątrz nawiasów jest atomem (rozpatrujemy je jako całość).

Wyrażenia regularne w Perlu. Narzędzia informatyczne w językoznawstwie. Przykład bardziej sensowny perlowy minigrep.pl. Pierwsze przykłady

Wstęp do informatyki 2011/2012. Wyrażenia regularne (sed)

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Uniwersytet Mikołaja Kopernika w Toruniu. Robert Ospara. Wizualizacja dopasowania wyrażeń regularnych Perla z użyciem biblioteki Gtk+

Spra r wd w za z nie e popra r wn w ości c danych c w w form r u m larz r a z ch c :

Linux Filtr grep. Opracował: Arkadiusz Curulak WSIiE TWP w Olsztynie

Środowisko programisty Zestaw 5

System operacyjny Linux

Napisy w PHP. Drukowanie napisów instrukcją echo

Reprezentacja symboli w komputerze.

Podstawy programowania w C++

Znaki w tym systemie odpowiadają następującym liczbom: I=1, V=5, X=10, L=50, C=100, D=500, M=1000

Laboratorium 10: Maszyna stanów

Języki i metody programowania. Omówienie języków C, C++ i Java

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika

KARTA KURSU. Języki skryptowe

Języki i metodyka programowania. Wprowadzenie do języka C

1. Wprowadzanie danych z klawiatury funkcja scanf

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR

Wprowadzenie do XML. Joanna Jędrzejowicz. Instytut Informatyki

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Linux Polecenia. Problem nadpisywania plików. Zmienna noclobber i noglob. Filtry i metaznaki. Problem nadpisywania plików. Opracował: Andrzej Nowak

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

1. Podstawy budowania wyra e regularnych (Regex)

Przydatne sztuczki - sql. Na przykładzie postgres a.

KONSTRUKCJA KOMPILATORÓW

Pracownia Komputerowa wyk ad VII

Różne pożyteczne polecenia oraz wyrażenia regularne. Kurs systemu Unix 1

Programowanie I. Wprowadzenie. Proces programowania

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Definiowanie języka przez wyrażenie regularne(wr)

Matematyczne Podstawy Informatyki

SED - Stream EDitor. edytor strumieniowy. Bogumił Konopka W-11/I-21 Politechnika Wrocławska

J ezyk AWK Kurs systemu UNIX

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Zmienne, stałe i operatory

Wstęp do Informatyki dla bioinformatyków

Programowanie C# mgr in. Dariusz Ku. p. 119A

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

OPCJE -A num, --after-context=num Wypisuje po pasujących liniach num linii następującego kontekstu.

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

Asynchroniczne interfejsy

O autorze... 9 Wprowadzenie Rozdział 1. Wprowadzenie do modułu mod_rewrite Rozdział 2. Wyrażenia regularne... 23

Znaki globalne w Linuxie

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Zajęcia 5 łańcuchy znaków (ciąg dalszy) i funkcje

Podstawy programowania w C++

Wstęp do wyrażeń regularnych na platformie.net

Programowanie w języku C++ Grażyna Koba

Środowisko programisty Zestaw 7

Oczywiście plik musi mieć rozszerzenie *.php

Microsoft IT Academy kurs programowania

Elementy wyrażeń regularnych

Wykład nr 1 Język Ruby i framework Rails

1. Wprowadzenie do języka PHP

Architektura systemów informatycznych. Powłoka systemowa Architektura procesora

Podstawy Kompilatorów

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Przyszłość programowania Języki funkcyjne na przykładzie Clojure

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Wstęp do programowania. Wykład 1

Architektura systemów komputerowych Laboratorium 5 Kodowanie liczb i tekstów

Wyra e ż nia Regularne Wyrażenia Regularne

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

QR code. Ramka składa się z następujących części: typ, liczba znaków, dane, terminator, dopełnienie do oktetu, dopełnienie do ramki.

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Zaawansowany kurs języka Python

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

29. Poprawność składniowa i strukturalna dokumentu XML

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

Kiedy i czy konieczne?

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Podstawy użytkowania Linux a

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Komunikacja człowiek-komputer

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Instrukcja dotycząca kodów kreskowych

EPI: Interfejs Graficzny Wykład nr 2 Wbudowane typy danych Rubiego

Podstawy programowania w języku C i C++

Wydawnictwo Helion ul. Koœciuszki 1c Gliwice tel

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

mod_rewrite. Podrêcznik administratora

TABULATORY - DOKUMENTY BIUROWE

Środowisko programisty

Transkrypt:

Regular expressions aka Regexp

Historia: teoria automatów oraz teoria języków formalnych Stephen Cole Kleene (1909-1994) lata 50 badania nad zbiorami regularnymi oraz teorią rekursji język programowania SNOBOL (1962-1968) Bell Labs koncepcja dopasowywania wzorców edytor QED (1965-1966) Bell Labs Ken Thompson zastosowanie wyrażeń Kleene'a

Historia: po przychylnym odbiorze swojego pomysłu Thompson wbudował regexpy również w edytor ed (a tym samym w vi) narzędzie grep jego nazwa wzięła się od polecenia edytora ed o postaci: g/re/p gdzie re oznacza właśnie regexp

Historia: kolejne narzędzia wykorzystujące regexp: expr AWK (Aho-Weinberger-Kernighan) Emacs lex

Historia: języki programowania, które wbudowały regexp na poziomie składni: Perl (1987 Larry Wall - NASA) Tcl (1988 - John Ousterhout University of California, Berkeley)

Historia: Perl Compatible Regular Expressions (PCRE) Philip Hazel implementacja regexp w stylu Perla w postaci biblioteki dla języka C - de facto standard adaptacja mechanizmów regexp dla większości współczesnych języków programowania: Java, JavaScript, Python, Ruby, rodzina.net, XML Schema, PHP, różne implemenatcje SQL, etc.

Koncepcja: wzorzec napis maszyna maszyna wyrażeń wyrażeń regularnych regularnych czyli czyli deterministyczna deterministyczna wyrocznia wyrocznia werdykt: tak lub nie

Zasada: maszyna dopasowuje wzorzec do napisu analizując oba ciągi znaków od lewej do prawej.

Zasada: jeśli pewien znak wzorca nie jest znakiem zastrzeżonym, to dopasowuje się sam do siebie; w szczególności same do siebie dopasowują się litery i cyfry

Przykład: Napis: Ala ma kota wzorzec Ala la mak kota ota koty dopasowanie NIE NIE

Zasada: niektóre znaki wzorca nie dopasowują się same do siebie - są to tzw. metaznaki. metaznaki języka wzorca wyrażeń regularnych: \ ( ) [ { ^ $ * +?.

Zasada: jeśli \ poprzedza liczbę i liczba ta nie rozpoczyna się cyfrą 0, to jest to tzw. odwołanie wsteczne (backreference) Przykład: \1 - odwołanie wsteczne do pierwszego dopasowanego podłańcucha

Zasada: jeśli \0 poprzedza trzy cyfry ósemkowe, to dopasowuje się do znaku w napisie o kodzie wyrażonym zapisem ósemkowym (tzw. octal escape) Przykład: \040 dopasowuje się do spacji

Zasada: jeśli \x poprzedza dwie cyfry szesnastkowe, to dopasowuje się do znaku w napisie o kodzie wyrażonym zapisem szesnastkowym (tzw. hex escape) Przykład: \x20 dopasowuje się do spacji

Zasada: jeśli \c poprzedza dowolny znak alfabetyczny (A-Z lub a-z), to dopasowuje się do odpowiadającego mu znaku kontrolnego w napisie. Przykład: \cd dopasowuje się do znaku ^D

Zasada: jeśli \u poprzedza cztery cyfry szesnatkowe, to dopasowuje się do znaku w napisie o kodzie wyrażonym zapisem szesnastkowym w standardzie UNICODE (tzw. unicode escape). Przykład: \u00a9 dopasowuje się do znaku

Zasada: jeśli \ poprzedza jedną z wymienionych dalej liter, to dopasowuje się do znaków specjalnych lub do jednego z klasy znaków:

Znaki specjalne \a \n \r \t \f \e \d \D \w \W \s \S BEL LF CR HT FF ESC <dowolna cyfra dziesiętna> <znak inny niż cyfra dziesiętna> <cyfra, litera, podkreślnik> <nie cyfra, nie litera i nie podkreślnik> <biały znak spacja lub \t lub \n lub \r lub \f <nie-biały znak>

Zasada: jeśli \ poprzedza dowolny inny znak (z kilkoma wyjątkami, o których niebawem) to jest to cytowanie (escaping); cytowania wymagają m.in. metaznaki oraz sam znak \ (*) (*) pamiętać należy o tym, że sam znak \ może wymagać osobnego cytowania zgodnie z wymogami języka C i pochodnych

Przykład: napis Ala ma 12 kotów Ala ma 12 kotów Ola ma psa Ola ma psa Ola.ma.psa wzorzec \d\d \d\d\d \w\w\w \w\w\w\w \.\w\w\.? NIE NIE

Zasada: metaznak ^ (caret) dopasowuje się nie do znaku, a do miejsca w napisie, tzn: do początku napisu (w trybie single-line) do początku linii (w trybie multi-line)

Przykład: napis: Ala ma 3 koty wzorzec Ala ^Ala ma ^ma ^\D \d ^\d? NIE NIE

Zasada: metaznak $ (dollar) dopasowuje się nie do znaku, a do miejsca w napisie, tzn: do końca napisu (w trybie single-line) do końca linii (w trybie multi-line)

Przykład: napis: Ala ma 3 koty wzorzec Ala Ala$ koty koty$ \D$ \d$ \w\w\w\w$? NIE NIE

Zasada: metaznak \b dopasowuje się tylko na granicy słowa metaznak \B dopasowuje się wszędzie poza granicą słowa.

Przykład: napis: wielka rzeka narzeka wzorzec rzeka \brzeka \Brzeka?

Zasada: metaznak \A dopasowuje się do początku napisu metaznak \Z dopasowuje się do końca napisu Oba dopasowania występują w napisie raz, niezależnie od tego, czy maszyna jest w trybie single-line czy multiline

Zasada: metaznak { to tzw. kwantyfikator określający wymagania ilościowe odnoszące się do poprzedzającego go znaku/wyrażenia wzorca.

Kwantyfikatory: Wyrażenia regularne zachłanny {n,m} {n,} {n} niezachłanny {n,m}? {n,}? {n}? wymagany zakres musi się pojawić co najmniej n razy ale nie więcej niż m razy musi się pojawić co najmniej n razy musi się pojawić dokładnie n razy dopasowywanie wzorca jest ZACHŁANNE jeśli nie użyto znaku? i NIEZACHŁANNE, jeśli użyto znaku?

Przykład: napis: 123123123123 wzorzec \d{0,12}123 \d{0,12}?123 \d{3,9}123 \d{3,9}?123 \d{3,}123 \d{3,}?123 \d{3}123 \d{3}?123 dopasowanie 123123123123 123 123123123123 123123 123123123123 123123 123123 123123

Kwantyfikatory specjalne: Wyrażenia regularne zachłanny * +? niezachłanny *? +??? równoważnik 0 lub więcej razy {0,} 1 lub więcej razy {1,} 0 lub 1 raz {0,1}

Przykład: napis: abcabcabc wzorzec \D*abc \D*?abc \D+abc \D+?abc dopasowanie abcabcabc abc abcabcabc abcabc

Zasada: ujęcie fragmentu wyrażenia regularnego w parę nawiasów ( ) nie zmienia jego znaczenia, a powoduje powstanie tzw. odwołania wstecznego (backreference); odwołań wstecznych może być dowolna liczba.

Przykład: napis: 1221 wzorzec (\d)(\d)\2\1 (\d)(\d)\1\2 dopasowanie? NIE

Zasada: metaznak. (kropka) pasuje do każdego znaku poza \n (w zasadzie)

Zasada: lista znaków w nawiasach [] (zbiór) dopasowuje jeden z tych znaków

Przykład: wzorzec: [OA]la napis Ola ma psa Ala ma kota dopasowanie

Zasada: znak ^ użyty jako pierwszy znak w zbiorze powoduje, że dopasowanie będzie zachodziło tylko dla znaków, których NIE MA zbiorze (dopełnienie)

Przykład: wzorzec: [^OA]la napis Ola ma psa Ala ma kota Dla psa kiełbasa dopasowanie NIE NIE

Zasada: wewnątrz zbioru dopuszcza się użycie znaku - dla oznaczenia klas znaków, np. [A-Z] - wielkie litery [a-z] - małe litery [0-9] - cyfry [A-Fa-f0-9] - cyfry szesnastkowe

Zasada: metaznak (bar) jest operatorem alternatywy

Przykład: wzorzec: (O A)la napis Ola ma psa Ala ma kota Dla psa kiełbasa dopasowanie NIE

Przykład: wzorzec: O Ala napis Ola ma psa Ala ma kota O! To pies Ali! dopasowanie NIE

Zasada: ujęcie fragmentu wzorca w nawiasy (? oraz ) nie powoduje powstania odwołania wstecznego, a jedynie wyróżnienie podłańcucha (np. w celu użycia metaznaku )

Przykład: wzorzec: (?O A)la napis Ola ma psa Ala ma kota Dla psa kiełbasa dopasowanie NIE

Zasada: pozytywne dopasowanie w przód ujęcie fragmentu wzorca w nawiasy (?= oraz ) nie powoduje powstania odwołania wstecznego, a powoduje, że poszukiwanie następnego dopasowanie rozpocznie się przed dopasowanym właśnie fragmentem

Przykład: wymaganie: hasło ma mieć od 4 do 8 znaków i musi zawierać co najmniej jedną cyfrę Wzorzec: ^(?=.*\d).{4,8}$

Zasada: negatywne dopasowanie w przód ujęcie fragmentu wzorca w nawiasy (?! oraz ) nie powoduje powstania odwołania wstecznego, a powoduje, że poszukiwanie następnego dopasowanie rozpocznie się przed niedopasowanym właśnie fragmentem

Przykład: wymaganie: szukamy słowa, które nie zaczyna się od za Wzorzec: \b(?!za)\w+\b

Zasada: nazwane odwołanie wsteczne ujęcie fragmentu wzorca w nawiasy (?<nazwa> oraz ) powoduje powstania odwołania wstecznego, do którego można odwołać się poprzez nazwę podaną w nawiasach < i >

Przykład: wyrażenie regularne, które sprawdza, czy pewien łańcuch jest poprawnym adresem e-mail oraz może posłużyć do wygodnego wyłuskania nazwanych podłańcuchów Wzorzec: (?<user>[^@]+)@(?<host>.+)