1-Úvod. Automaty a gramatiky(bi-aag) Plán přednášky. 8. Regulární výrazy - aplikace

Podobné dokumenty
Programování. Bc. Veronika Tomsová

Regulární výrazy. Honza Vrbata

grep a regulární výrazy

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Regulární výrazy. Filtry grep, sed a awk.

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20

DUM č. 5 v sadě. 34. Inf-10 Praktická typografie s LO Writer/MS Word

Úvod do UNIXu. Okruh č. 4 - vi, regulární výrazy, grep a sed. Jakub Galgonek. verze r2. inspirováno materiály Davida Hokszy

Regulární výrazy. jemný úvod. Miloslav Brada


Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března / 32

Formální jazyky a gramatiky Teorie programovacích jazyků

B A B A B A B A A B A B B

Jednoznačné a nejednoznačné gramatiky

Přednáška 4. Regulární výrazy. Filtry grep, sed a awk. Úvod do Operačních Systémů Přednáška 4

Regulární výrazy. Vzory

Programovací jazyk Pascal

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

2 Formální jazyky a gramatiky

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Úvod do programovacích jazyků (Java)

more Program se zastaví vždy po vypsání jedné stránky textu. Ukončení Ctrl+C less Umožňuje pohybovat se v souboru dopředu i dozadu.

Konečný automat. Jan Kybic.

Parsování v Haskellu, knihovna Parsec

63. ročník Matematické olympiády 2013/2014

Tabulkový procesor. Základní rysy

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Úvod do programovacích jazyků (Java)

HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT

Pumping lemma - podstata problému. Automaty a gramatiky(bi-aag) Pumping lemma - problem resolution. Pumping lemma - podstata problému

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

UNIVERZITA PARDUBICE ÚSTAV ELEKTROTECHNIKY A INFORMATIKY VYUŽITÍ REGULÁRNÍCH VÝRAZŮ PŘI OPRAVÁCH TEXTU, ÚPRAVÁCH A GENEROVÁNÍ SOUBORŮ BAKALÁŘSKÁ PRÁCE

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 21. března / 50

Základy algoritmizace. Pattern matching

Programování v jazyce JavaScript

Algoritmizace a programování

Lexikální analýza. Rozhraní lexikálního analyzátoru. Miroslav Beneš Dušan Kolář. M. Beneš, D. Kolář: Lexikální analýza 1. Lexikální analýza 2

Lexikální analýza. Miroslav Beneš Dušan Kolář

Základy algoritmizace a programování

Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

Proměnné a parametry. predn_08.odt :00:38 1

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PROGRAMOVÁNÍ V SHELLU

Hardwarová realizace konečných automatů

Jazyk C++, některá rozšíření oproti C

Úvod do programování 6. hodina

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

Program grep. predn_05.doc

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

Základy XML struktura dokumentu (včetně testových otázek)

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

LinuxDays 2017 Ondřej Guth GNU grep LD 17 1 / 14

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Poslední nenulová číslice faktoriálu

Regulární výrazy v Mergadu

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Regulární výrazy a grep

Úloha 3 editor a skripty. připojte se vzdáleně na dray6.feld.cvut.cz heslo získáte na adrese

Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Základy algoritmizace a programování

Lekce 2. Řetězce a práce s nimi. Vstup a výstup. C2184 Úvod do programování v Pythonu podzim 2016

Úvod do programování. Lekce 1

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE FORMALISMY PRO SYNTAXÍ ŘÍZENÝ PŘEKLAD: PŘEKLADOVÉ A ATRIBUTOVÉ GRAMATIKY.

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

C2110 Operační systém UNIX a základy programování

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Vyhledávání v textu. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

LOGICKÉ OBVODY 2 kombinační obvody, minimalizace

PB071 Úvod do jazyka C

Stručné shrnutí v bodech

Cvičení 1. Úvod do teoretické informatiky(2014/2015) cvičení 1 1

Programování v Pythonu

dovolují dělení velkých úloh na menší = dekompozice

Konstruktory překladačů

Kdy se narodil... Vypracovali: Mrkývka Vojtěch, Mrázek Ondřej, Novotná Marie. Předmět: PLIN08 Projekty II. Semestr: Jaro 2015

5. Dynamické programování

Jazyk C++ II. STL knihovna kontejnery část 2

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

ČVUT FIT: BI-SKJ: Perl

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

Lineární algebra : Násobení matic a inverzní matice

Naproti tomu gramatika je vlastně soupis pravidel, jak

IB111 Úvod do programování skrze Python Přednáška 13

Formátování textu pomocí regulárních výrazů

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora

Reranking založený na metadatech

Datové struktury 2: Rozptylovací tabulky

Tvorba výrazu: speciální znaky shellu se uvádějí do apostrofů jednotlivé části výrazu se oddělují mezerou

Dynamické programování

Příklad buňka tabulky

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Regulární výrazy. Motto:

Transkript:

BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 2/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 4/51 1-Úvod Automaty a gramatiky(bi-aag) 8. Regulární výrazy - aplikace Jan Holub Katedra teoretické informatiky Fakulta informačních technologií ČVUT v Praze Jak popsat množiny řetězců? Omezený regulární výraz (UNIX shell) Regulární výraz (RE) Rozšířený regulární výraz (ERE) Regulární výraz - jak poznat, o kterém typu se mluví: Regular expression = regulární výraz podle Kleena Regex, Regexp = posixový a perlový regulární výraz c Jan Holub, 2011 Evropský sociální fond. Praha & EU: Investujeme do vaší budoucnosti BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 1/51 Plán přednášky 1. Úvod jak popisovat množiny řetězců 2. Co je regulární výraz a co ještě není Shell pattern matching vs. grep, perl 3. Plnohodnotné regulární výrazy 4. Definice, příklady Posix RE BRE, ERE 5. Definice, příklady Perl RE 6. Shody a rozdíly vůči teorii (Kleene) 7. Podpora RE v programovacích jazycích 8. Implementace regexp enginů 1-Úvod Jak popsat a rozhodovat množiny řetězců? BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 3/51 Omezený regulární výraz (UNIX shell): pattern matching Plnohodnotný regulární výraz: konečný automat Rozšířený reguálrní výraz: matching engine s backtrackingem

BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 6/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 8/51 2 - Coještěnení RE 2-UNIXShell Pattern UNIX shell pattern Popisuje množiny řetězců nad abecedou T, které jsou vlastní podmnožinou množiny regulárních jazyků (tzn. není tak silný, jako RE). Používá speciální metasymboly pro vyjádření libovolného řetězce, libovolného symbolu a libovolného symbolu ze zadané množiny Pattern je posloupnost symbolů a metasymbolů Použité metasymboly: [abc0-9], [ˆd-z] : popisuje množinu povolených, resp. zakázaných symbolů (pro zákaz se vedle ˆ dá použít také! ). Umožňuje pomocí pomlčky popsat rozsah.? : otazník znamená jakýkoli symbol : hvězdička znamená libovolný řetězec \ : escape symbol pro umožnění vkládání [,?,, \ do patternu Řetězec "vyhovuje"patternu, pokud se symbol po symbolu dá namapovat na symboly patternu BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 5/51 2-UNIXShell Pattern BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 7/51 2-UNIXShell Pattern Použité metasymboly: [ ], [ˆ ]? \ Příklady množin řetězců a patternů, které je popisují: řetězce pattern a.txt a.txt a.txt, b.txt [ab].txt a.<3 znaky> a.??? a na začátku a.txt na konci a.txt libovolný řetězec

BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 10/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 12/51 2-UNIXShell Pattern 2-POSIX třídysymbolů Příklady patternů a množin řetězců, které jsou popsány: pattern řetězce main.c [a-ce].c?x?.txt Třídy symbolů, které nahrazují rozsahy v závorkách. Posix třídy jsou na rozdíl od rozsahů přesně definovány a je vhodné je používat, pokud vyžadujeme spolehlivé vyhodnocení patternu. Třídy jsou popsány pomocí [: name :] a samotné se dají použít jen uvnitř hranatých závorek. [[: alpha :]] je to samé co [a-za-z] [[: alnum :]] je to samé co [[: alpha :]01 9] [: alpha :] [: alnum :] [: ascii :] [: blank :] [: cntrl :] [: digit :] [: graph :] [: lower :] [: print :] [: punct :] [: space :] [: upper :] [: word :] [: xdigit :] BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 9/51 2-UNIXShell Pattern BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 11/51 2-UNIXShell Pattern Příklady patternů a množin řetězců, které jsou popsány: pattern řetězce main.c main.c [a-ce].c a.c, b.c, c.c, e.c?x? axa, axb, axc,....txt cokoli na začátku a.txt na konci libovolný řetězec Pokud chceme popsat řetězec, co obsahuje znak(y), \, [,?, potřebujeme před tyto symboly v patternu vložit escape symbol \ nebo použít Nadto pozor na způsob, jakým shell interpretuje neescapované metasymboly: ls [a].txt: existuje-li a.txt, nalezne pouze jej. ls [a].txt: nalezne [a].txt, pokud tento existuje a zároveň neexistuje a.txt

2-Pattern-poznámky na závěr BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 14/51 3 - Plnohodnotné regulární výrazy BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 16/51 Definice významu metasymbolů se mezi Unixovými nástroji liší v závislosti na použití. Některé například vyhledají s pomocí řetězce obsahující / a jiné nástroje zase ne. Při vyhledávání souborů patterny a? nenaleznou soubory začínající tečkou. Použijte. Vyhledávanému vzorku se často říká glob Dělení symbolů v regulárních výrazech: Literály (ordinary characters) Metasymboly (special characters) 1. Kotvy (anchors) 2. Zástupné symboly (character sets) 3. Modifikátory a kvantifikátory (modifiers, quantifiers) Escape symbol BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 13/51 3 - Plnohodnotné regulární výrazy BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 15/51 3 - Plnohodnotné regulární výrazy V praxi se regulární výrazy používají velmi běžně. Přímo vycházejí z Kleeneovy teorie a podle potřeb ji dále rozvíjejí. Vyvinuly se dva hlavní standardy: Posixové základní a rozšířené RE (BRE a ERE) Perlové regexpy Význam symbolů v regulárních výrazech: Literály: znamenají samy sebe Metasymboly: mají speciální význam 1. Kotvy: určují pozici výskytu v textu 2. Zástupné symboly: znamenají libovolný literál z dané množiny 3. Modifikátory a kvantifikátory: Umožňují operace na regulárních výrazech jako je sjednocení nebo iterace Escape symbol: dělá z metasymbolu literál

3 - Plnohodnotné regulární výrazy BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 18/51 4-BRE-Zástupné symboly BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 20/51 Řetězec x je výskyt regulárního výrazu r, pokud řetězec x patří do množiny řetězců definované regulárním výrazem r. Popis množiny symbolů v BRE: x symbol x. jakýkoli symbol [abc] a nebo b nebo c [a-c] a nebo b nebo c [ˆa-c] jakýkoli symbol kromě a, b a c [[: alpha :][: space :]#] jakýkoli symbol abecedy, mezerový symbol nebo # BRE akceptuje posixové třídy symbolů BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 17/51 4 - PosixovéBRE BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 19/51 4-BRE-Kvantifikátory BRE = Basic Regular Expressions Základní norma pro UNIXové regulární výrazy Tuto normu splňuje většina UNIXových nástrojů, které pracují s RE. Kvantifikátory následují za regulárním výrazem. Odpovídají operaci iterace, ale umí být i jemnější: \{m, n\} \{m, \} \{m\} 0 nebo víc výskytů za sebou od m po n výskytů za sebou m a víc výskytů za sebou m výskytů za sebou \ před { a } je nutný.

4 - BRE-Kvantifikátory-příklady BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 22/51 4-BRE-Kotvy-příklady BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 24/51 Kvantifikátory následují za regulárním výrazem. Odpovídají operaci iterace, ale umí být i jemnější: Regulární výraz popsané řetězce ba b, ba, baa, baaa,... [ba] libovolně dlouhý řetězec symbolů a a b \(ba\) [ba]\{1, 2\} ε, ba, baba, bababa b, a, bb, ba, ab, aa a\{3, \} aaa, aaaa, aaaaa,... [ba]\{2\} bb, ba, ab, aa Kotvy slouží k popisu pozice výskytu na řádku. Regulární výraz Nalezne Zavrhne ˆkop kopáč Franta známý kopytník chod$ dlouhý podchod pochod na jih \<kol kolo okolo tok\> roztok stokrát \ před { a } je nutný. BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 21/51 4-BRE-Kotvy BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 23/51 4 - BRE-Speciálníznaky Kotvy slouží k popisu pozice výskytu na řádku. Kotva Význam ˆ Začátek řádku $ Konec řádku \< Začátek slova (nestandardní, původem z vi) \> Konec slova (nestandardní, původem z vi) \ před < a > je nutný. Další znaky v BRE: Znak Význam \(\) Vytvoření skupiny; skupiny jsou implicitně číslovány, aby se na ně dalo odkazovat \čislo Opakovaný výskyt vzorku z odpovídající závorky (mechanismus pro pamatování!) \n Znak nové řádky (nestandardní; používá například sed) \ před ( a ) je nutný.

4 - BRE-Speciálníznaky BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 26/51 4-BRE-různý významescape \ BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 28/51 Další znaky v BRE: Regulární výraz \(hrad\) \(hrad \)\1 popsané řetězce hrad hrahra, hradhrad, hraddhradd,... Pokud je znak \ před, [,., \, ˆ, $, "vypíná" speciální význam těchto znaků. Pokud je znak \ před (, ), <, >, {, }, "zapíná" speciální význam těchto znaků. Co popisuje [\ \[ ]\{2\}? \ před ( a ) je nutný. BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 25/51 4-BRE, ERE-POZOR! BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 27/51 4 - PosixERE Veškeré RV, pokud není řečeno jinak, jsou "hladové" (greedy). To znamená, že se budou snažit najít nejdelší možný vzorek: Text: Pattern: Nalezený vzorek: aabcaabcde a. b aabcaab BRE dovolují popisovat některé neregulární jazyky a zároveň neumí všechny regulární Chybí možnost popsat alternativu - sjednocení BRE nejednotně používají escape znak Proto existují Extended Regular Expressions (ERE), které se (s diskutabilní úspěšností) snaží řešit problémy BRE

4-ERE-změny oprotibre BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 30/51 4-ERE-změny oprotibre BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 32/51 Ruší se následující speciální znaky: \{\} \<\> \(\) \cislo Nové metasymboly pro skupinu: ( ) skupinové závorky alternativa ve skupině ERE (ab bc cd) (hrad zamek) popsaná množina řetězců {ab, bc, cd} {hrad, zamek} Kvantifikátory - příklady: Regulární výraz popsané řetězce ba b, ba, baa, baaa,... ba+ ba, baa, baaa,... ba? b, ba [ba] libovolně dlouhý řetězec symbolů a a b (ba) ε, ba, baba, bababa [ba]{1, 2} b, a, bb, ba, ab, aa a{3, } aaa, aaaa, aaaaa,... [ba]{2} bb, ba, ab, aa BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 29/51 4-ERE-změny oprotibre BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 31/51 4 - BREaERE-výskyt Nové kvantifikátory: kvantifikátor význam 0 nebo víc opakování + 1 a víc opakování? 0 nebo 1 výskyt {m, n} od m po n výskytů {m, } m a víc výskytů {m} m výskytů Výskyt v UNIXových nástrojích: BRE ERE vi awk more nawk ed egrep grep grep -E sed sed -r......

4-BREaERE - kontroverze BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 34/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 36/51 Ačkoli se norma pokouší definovat "správné" regulární výrazy, nepředkládá přehledný a snadno použitelný formalismus Téměř každý UNIXový nástroj používá vlastní variantu regulárních výrazů - je důležité otestovat RE před jeho pracovním nasazením Zjištění, zda řetězec $string obsahuje výskyt regulárního výrazu regex: $string =~m/regex/; Náhrada prvního výskytu za jiný: $string =~s/regex/replacement/; Náhrada všech výskytů za jiný: $string =~s/regex/replacement/g; BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 33/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 35/51 Perl je skriptovací jazyk (počátek 90. let) Má přímo zabudovanou podporu regulárních výrazů Staví na posixových RE, rozšiřuje je a zpříjemňuje práci s nimi Některá rozšíření způsobila, že perlový regexp popisuje striktně více než třídu regulárních jazyků (podobnost s BRE) Za standard se bere Perl 5.10 regexp Perl navazuje na ERE a přidává další funkcionalitu: Opět zavádí pamatování a odkazování pomocí \cislo Lazy kvantifikátory (vedle greedy) Umožňuje lookahead, lookbehind Vlastní, "shorthand" třídy symbolů Nové kotvy

BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 38/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 40/51 Sjednocené metasymboly: { }[ ]( )ˆ$. +?\ mají speciální význam Pokud je chceme vyhledat jako literály, musí jim předcházet \ Escape sekvence pro ASCII znaky: \n, \r, \t, \x[hexa], \u[unicode], Modifikátory vyhledávání výskytu regulárního výrazu: i = ignore case g = v případě nahrazování vyhledat a nahradit všechny výskyty. Při opakovaném hledání hledat od posledního výskytu.... BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 37/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 39/51 Sjednocené metasymboly - příklady: Regulární výraz popsané řetězce /(abc){1, 2}/ abc, abcabc /[ab]?d/ d, ad, bd /ˆ. $/ jakákoli celá řádka /a+b c+/ ab, aab,..., c, cc,... /\ \\\+/ \+ Příklady: Regulární výraz /hi\nworld/ popsané řetězce hi world /entry\t\x61\x74/ entry at /hello/i hello, Hello, hello,...

BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 42/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 44/51 Vkládání proměnných do regulárních výrazů: $var = hr; /${var}ad/ nalezne výskyt řetězce hrad Nové třídy proměnných: \d, \D = [0-9], [ˆ0-9] \s, \S = [mezerové znaky], [ˆ\s] Zpětná reference na výskyt uzávorkovaný v regulárním výrazu pomocí ( ): Zevnitř regulárního výrazu: \<pořadové číslo otevírací závorky> Vně regulárního výrazu: $<pořadové číslo otevírací závorky> Závorka, která si nemá pamatovat, má formu (? : regex) \w, \W = [znaky slov], [ˆ\w] Nová kotva \b nalezne hranice slov. BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 41/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 43/51 Příklady: Regulární výraz popsané řetězce $x = int; /${x}\s+\w+; / int a;, int b;, int ab;,... /\b\d+\b/ číslo (jen z číslic) Lookahead - pozitivní i negativní (za výskytem se má něco vyskytovat, nebo nesmí vyskytovat). (?=regexp) (?!regexp) Lookbehind - pozitivní i negativní (před výskytem se má něco vyskytovat, nebo nesmí vyskytovat). Regulární výraz použitý v lookbehindu musí mít fixní délku výskytu. (?<=regexp) (?<!regexp)

BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 46/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 48/51 Příklady: Regulární výraz popsané řetězce /([abc]+)d\1/ ada, bdb, cdc, aadaa, abdab,... proměnná $1: a, b, c, aa, ab,... /(? : so ra)k/ sok, rak (pro připomenutí?) /auto(?=mat)/ auto (po kterém musí následovat mat ) /(?<=pod)chod/ chod (který musí předcházet pod ) Příklad: budeme vyhledávat v textu abcabcabcd regexp výskyt abc d ano (abc) (abc) d ano, $1 = abcabcabc, $2 = (abc)?(abc) d ano, $1 =, $2 = abcabcabc (abc) +(abc) d ano, $1 = abcabcabc, $2 = (abc) +(abc)+d ne BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 45/51 BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 47/51 6-Shody arozdílyvůči teorii Greedy, lazy a possessive kvantifikace Všechny kvantifikátory jsou ze základu greedy Pokud chceme lazy kvantifikátor, napíšeme za kvantifikátor?, pro possessive + greedy lazy possessive? + + +? ++......?...+ Posixové a perlové regulární výrazy vycházejí z Kleeneovy teorie, ale jsou zde odlišnosti: Kleene RE popisuje regulární jazyky Žádný kontext Nejjednodušší možný popis (bez +,?, { }, ˆ,..) BRE/ERE/Perl RE popisuje i něco navíc (díky odkazům) Kotvy, lookaround Popis co nejpříjemnější pro užití (Perl)

7 - PodporaREvjazycích BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 50/51 9-Závěr-odkazy adotazy Zabudována jako součást syntaxe přímo do jazyka Perl, Ruby, Awk, Tcl, PHP,... Prostřednictvím knihoven a funkcí Java, C, C++,... Za vzor se berou Perl 5.10 regulární výrazy http://www.regular-expressions.info/quickstart.html http://www.gnu.org/software/sed/manual /html_node/regular-expressions.html http://www.grymoire.com/unix/regular.html http://www.grymoire.com/unix/sed.html#uh-0 http://perldoc.perl.org/perlre.html http://regexpal.com/ BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 49/51 8- Regexp vyhledávací enginy BI-AAG (2011/2012) J. Holub: 8. Regulární výrazy - aplikace p. 51/51 DKA (převod RV na DKA) NKA (převod RV na NKA, Thompsonova metoda) Backtracking vyhledávání (nutné pro neregulární jazyky). Pozor, až exponenciální složitost ve srovnání s automaty!