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

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

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.

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

grep a regulární výrazy

Algoritmizace a programování


PHP tutoriál (základy PHP snadno a rychle)

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

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

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

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ , 5.1 a 5.2 8/14

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

Regulární výrazy. Vzory

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

Regulární výrazy. Honza Vrbata

Konečný automat. Jan Kybic.

M - Výroková logika VARIACE

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

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

PROGRAMOVÁNÍ V SHELLU

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

Textové, datumové a časové funkce

Standardní algoritmy vyhledávací.

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

Inovace bakalářského studijního oboru Aplikovaná chemie

Regulární výrazy a grep

Algoritmizace a programování

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

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

HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT

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

KIV/ZIS cvičení 5. Tomáš Potužák

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

5 Přehled operátorů, příkazy, přetypování

Programovací jazyk Pascal

Úvod do databázových systémů

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

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

Paměť počítače. alg2 1

NPRG030 Programování I, 2010/11

Rozšíření ksh vůči sh při práci s proměnnými

Výroková logika II. Negace. Již víme, že negace je změna pravdivostní hodnoty výroku (0 1; 1 0).

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Obsah. O autorech 9 Earle Castledine 9 Myles Eftos 9 Max Wheeler 9 Odborný korektor 10. Předmluva 11 Komu je kniha určena 12 Co se v knize dočtete 12

NPRG030 Programování I, 2016/17 1 / :58:13

Abclinuxu.cz ITBiz AbcHost 64bit AbcPrace UnixShop Stickfish

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

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

u odpovědí typu A, B, C, D, E: Obsah: jako 0) CLP Constraint Logic Programming

Inteligentní vyhledávač hodnocení knih

Programování v jazyce JavaScript

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

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

VISUAL BASIC. Práce se soubory

Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CLIL jako výuková strategie na vysoké škole

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

Úvod do databázových systémů

Programování v jazyce JavaScript

Konstruktory překladačů

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

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

Logika. 2. Výroková logika. RNDr. Luděk Cienciala, Ph. D.

Sada 1 - Základy programování

Program grep. predn_05.doc

Funkcionální programování. Kristýna Kaslová

2 Formální jazyky a gramatiky

ANOTACE vytvořených/inovovaných materiálů

13. Skriptovací jazyk PHP

Parsování v Haskellu, knihovna Parsec

Univerzita Karlova v Praze Pedagogická fakulta

TNPW1 Cvičení aneta.bartuskova@uhk.cz

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

2 Strukturované datové typy Pole Záznam Množina... 4

Da D to t v o é v ty t py IB111: Datové typy

Zadání soutěžních úloh

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

Úvod do programování 6. hodina

Sekvenční a podmíněné provádění

Jak lze v korpusech hledat doklady pro výzkum morfologie?

16. Goniometrické rovnice

Microsoft Office. Excel vyhledávací funkce

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Richtext editory. Filip Dvořák

Šablonovací systém htmltmpl vypracoval: Michal Vajbar, Šablonovací systém htmltmpl

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

Přednáška 3. Rekurze 1

6. Příkazy a řídící struktury v Javě

Možnosti tisku v MarushkaDesignu

Assembler - 5.část. poslední změna této stránky: Zpět

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Základy algoritmizace. Pattern matching

Formální systém výrokové logiky

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

Složitost Filip Hlásek

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.

Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce

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

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.


Předávání údajů do Informačního systému výzkumu, experimentálního vývoje a inovací ve formátu XML

Transkript:

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

Regulární výrazy - RegExy K čemu vůbec jsou? Nástin možností Jednoduché vzory, pravidla regexpů Metaznaky Opakování Skupiny Jednoduchý příklad na závěr 2

Co RegExy umožňují odpovědět na otázku obsahuje daný text požadovaný vzor? vyhledávání textu shoda s maskou (email, telefonní číslo) provádět nahrazení nalezeného textu jiným textem zjistit, co vlastně bylo nalezeno někdy vlastně ani pořádně nevíme co hledáme obecně zjednodušit mnoho operací týkajících se hledání, ověřování a manipulace s textem, které by bylo jinak nutné provádět ručně/velice komplikovaně programovat 3

Setkání s RegExy pravděpodobě každý máme již zkušenost masky souborů (*.sh,???.iso, atd...) vyhledávání (*, % v SQL, atd...) v této podobě dosti omezené možnosti, regexy nám nabízejí mnohem víc!!! součástí mnoha nástrojů jazyky Perl, PHP, Java, Python, Javascript, BASH... GNU nástroje sed, awk, [ef]grep, vim... v mnoha dalších Eclipse, OpenOffice... 4

Příklady... 5

Možnosti specifikace vzorů můžeme si zvolit: přesně jaké znaky chceme či naopak nechceme mít na daných pozicích použít žolíky s omezujícími pravidly vyhledávání podle pozice na začátku, na konci na hranici slova, za bílým znakem, před libovolnou číslicí atd... limity na počet opakování, požadavek nutné přítomnosti, volitelné přítomnosti hledaní podle několika možných alternativ hledaní podle toho, co už bylo nalezeno 6

Začínáme... Testovací věta: $veta= Abeceda neni veda, a to ani pro medveda. Vyhodnocení pomocí $veta =~ /REGEXP/ $veta =~ /medved/ true $veta =~ /MeDved/ false $veta =~ /medvedi/ false v RegExech se rozlišují malá/velká písmena prohledávaný text musí odpovídat vzoru celý, nestačí jen část 7

Začínáme... prohledávání se děje zleva doprava první nález ukončuje hledání příklad $veta =~ /veda/ $veta =~ /a/ $veta =~ / a/ 8

Znakové alternativy znakové alternativy se specifikují pomocí [] rozsahy znaků pomocí intervalu, např. [a-z], [0-9] možnost kombinace [0-9a-fA-F] negace pomocí ^, platí pro celý obsah závorky [^0-9abcdef] žádná číslice, žádný ze znaků a, b, c, d, e, f příklad $veta =~ /[cv]eda/ $veta =~ /[^lcv]eda/ false 9

Žolík. reprezentuje libovolný znak neplést s? nebo * - to je něco jiného!!! příklad $veta =~ /n.n/ $veta =~ /... / 10

Určení pozice ^ znamená začátek řetězce neplést s [^a-z], tady ^ znamená negaci $ znamená konec řětězce \b znamená hranice slova příklad $veta =~ /^veda/ false $veta =~ /pro$/ false $veta =~ /\b[cv]eda\b/ true 11

Opakování u každého elementu výrazu můžeme specifikovat počet opakování * 0 -? 0-1 + 1 - {m,n} m - n {n,} n - {n} přesně n regulární výrazy jsou žravé vyhoví nejdelší možný podřetězec odpovídající výrazu 12

Opakování příklady příklad $veta =~ /Abec.*a/ $veta =~ /v?ed/ $veta =~ /v+ed/ $veta =~ /veda{2,}/ false 13

Opakování omezení žravosti připojením? *? 0 -, nejlépe 0?? 0-1, nejlépe 0 +? 1 -, nejlépe 1 {m,n}? m - n, nejlépe m {n,}? n -, nejlépe n snaha o nalezení co nejkratšího řetězce, ještě vyhovujícího výrazu 14

Opakování příklady příklad, $veta= aaaabbbccd ; $veta =~ /b*?/ true!!! aaaabbbccd $veta =~ /b+?/ aaaabbbccd $veta =~ /a{2,}/ aaaabbbccd $veta =~ /a{2,}?/ aaaabbbccd 15

\d, \D číslice, ^číslice - [0-9] \s, \S Metaznaky bílý znak, ^bílý znak - [ \t\r\n\f] \w, \W písmeno, číslíce v úvahu se berou I znaky národní abecedy, tj. není to to samé jako [a-za-z0-9] \ speciální znak, ruší význam znaků ()[]{}$^. *+?\ \ se zapisuje zdvojeně \\ 16

Metaznaky příklady příklad $veta =~ /./ $veta =~ /\./ $veta =~ /\sveda\b/ # \b není součástí nalezeného výrazu $veta =~ /veda./ $veta =~ /veda\./ 17

zápis pomocí () Skupiny definují alternativní podvýrazy dá se na ně zpětně odkazovat $veta =~ /(jo po)hanka/ odpovídá jak johanka tak I pohanka zpětné odkazy se zapisují \1, \2, \3... \1, \2... odpovídá první, druhé... skupině př. na nalezení pěti písmenného palindromu $text =~ /(.)(.).\2\1/ - najde např. kajak 18

Skupiny jako vedlejší efekt vznik proměnných $1, $2... pokud nechceme vznik zpětného odkazu, použijeme skupinu (?:REGEXP) příklady zjištění obsahu buňky v HTML $html =~ /<td>(.*?)<\/td>/; parsování telefonního čísla, (konečně něco aspoň trochu zajímavého) $cislo =~ /(?:\+ 00)\s?(\d{1,3})\s?((\d (?:\s))*)\b/ v $1 bude národní předvolba v $2 cislo 19

Nahrazení a příklad v perlu operací $text =~ s/regexp/nahrada/x; nahradí v textu výraz REGEXP textem v NAHRADA x mohou být další volby, např. ignore case, global zdokonalené parsování čísla $cislo =~ /(?:(?:\+ 00)\s?(\d{1,3})\s?)?(\d{1,3})\s?((\d (?:\s))*)\b/; $zeme=$1; $predvolba=$2; $ucastnik=$3; zbavení se mezer v $ucastnik $ucastnik =~ s/\s//g; příklady vstupů, které náš výraz spravně vyhnodnotí +420234123456, 00420 234 12 34 56, +420 2 341 234 56, +420 234 123 456, 00 420 2 3 4 1 2 3 4 5 6 234 123 456, 234 12 34 56, 234123456 v tomto případě bude $1 nedefinované (správné chování!!!) 20

Shrnutí RegExpy jsou mocný nástroj základem je implementace v Perlu jinde je někdy obrácený význam speciálních znaků a musí se před ně psát \ ostatní nástroje často neumí vše, co Perl man perlretut další zdroje www.regularnivyrazy.info www.regexp.cz tutoriály na abclinuxu.cz, root.cz spousta dalších zdrojů (google napoví ;)) 21

\b[zz]ávěr(?:em)?\.\.\.\b Děkuji za pozornost... 22