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

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

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

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

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

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

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

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

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

Programovací jazyk Pascal

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

PROGRAMOVÁNÍ V SHELLU

Regulární výrazy v Mergadu

Úvod do programování 6. hodina

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

Znak Slovy Popis Zdroj Výsledek Formátova cí řetězec v CZ verzi Excelu

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

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

Tabulkový procesor. Základní rysy

Algoritmizace a programování

Algoritmizace a programování

Výukový materiál zpracován v rámci projektu EU peníze školám

VISUAL BASIC. Práce se soubory

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

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

13. Skriptovací jazyk PHP

Úvod do programování 7. hodina

Microsoft Office. Excel vlastní formát buněk

Regulární výrazy. Honza Vrbata

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.

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

Word textový editor. Tlačítko Office základní příkazy pro práci se souborem. Karta Domů schránka. písmo. vyjmout. vložit kopírovat.

Výňatek normalizované úpravy písemností ČSN

Školní kolo soutěže Baltík 2009, kategorie C

Syntaxe XML XML teorie a praxe značkovacích jazyků (4IZ238)

Algoritmizace a programování

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

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

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

Dávky zahraničních příkazů ve formátu Multicash

1.5.2 Číselné soustavy II

HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Pokyny k vypracování absolventské práce

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

Gymnázium, Brno, Slovanské nám. 7 WORKBOOK. Student: NEJČASTĚJŠÍ CHYBY A JAK SE JIM VYHNOUT Uvozovky a palce

Gymnázium a Střední odborná škola, Chomutovská 459, Klášterec nad Ohří ÚPRAVA SEMINÁRNÍCH PRACÍ

Základy PHP. Josef Podstata. KTE/IZTT - Zpracování textu, tabulek a prezentací. Univerzita Palackého v Olomouci

Typografická pravidla

KAPITOLA 4 ZPRACOVÁNÍ TEXTU

LEKCE 6. Operátory. V této lekci najdete:

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

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

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

Úvod do programování. Lekce 1

Backspace maže znaky před kurzorem (tedy zprava)

Stručný návod k programu Octave

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ů

Řekl: V létě 89 zemřela. d Artagnan

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

ČÍSELNÉ SOUSTAVY PŘEVODY

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

INFORMATIKA. aplikační software pro práci s informacemi TSUNAMI. Pracovní list pro žáky. Gymnázium K. V. Raise, Hlinsko, Adámkova 55

Prezentace a vysvětlení programového prostředí NXC

Konečný automat. Jan Kybic.

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Technická dokumentace Ing. Lukáš Procházka

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

Normalizovaná úprava písemností v MS Word

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

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

PSK3-9. Základy skriptování. Hlavička

Operační systém UNIX

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

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

Uplatnění metod na zvolený jazyk

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Typografická pravidla - úvod

NPRG030 Programování I, 2010/11

grep a regulární výrazy

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

Skripty - úvod. Linux - skripty 2

4. Jednoduché výpočty

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

PHP. Čtvrtek 8. září. Čtvrtek 15. září. Anonymní test znalostí

Základy PERLu snadno a rychle

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Návod na velmi jednoduchý import z XLS souboru včetně atributů

POKYNY PRO TYPOGRAFICKOU ÚPRAVU TEXTU

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

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

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Transkript:

Co jsou to regulární výrazy? Regulárními výrazy se používají ke zpracovávání textových řetězců. Vytvoříme si tzv. masku a zjišťujeme, zda jí textový řetězec vyhovuje (např. zda se skládá ze samých čísel ). Zda zadaný řetězec odpovídá vzoru vyjádřeným regulárním výrazem. http://wiki.jalakai.co.uk/include/preg.php

Použití v PHP? Funkce preg_match() (ereg() se již dnes nepoužívá!). Při UTF-8 kódování pak především funkce mb_ereg(), mb_eregi() (totožné, jen mb_eregi() není citlivá na velikost písmen. Vrací true, vyhovuje-li řetězec dané masce. Syntaxe: Příklad: mb_ereg (maska, řetězec) if ( mb_ereg ( den, Dobrý den ) ) echo řetězec obsahuje znaky den ; else echo řetězec neobsahuje znaky den ; if ( preg_match ( /den/, Dobry den ) ) if ( preg_match ( /den/i, Dobry den ) ) // nebude citlivá na velikost písmen

Je v řetězci obsažen podřetězec? Maska skládající se z pouhých znaků hledá výskyt tohoto podřetězce v daném řetězci program dobrý den programování

PŘÍKLAD: Je v řetězci obsažen podřetězec? den dobrý den denně se potkáváme škola

Tečka jako libovolný znak Tečka zastupuje jakýkoliv jeden znak gr.m program grimasa bagr může závodit agronom

PŘÍKLAD: Tečka jako libovolný znak je.en jeden, dva, tři Kdo je ten muž? pr...m složitý program prodám počítač

Jen vybrané znaky Výběr z několika konkrétních znaků za pomoci hranatých závorek [] dobr[ýé] dobrý den dobré jídlo dobrou noc

PŘÍKLAD: Jen vybrané znaky á.[123] Kobra 11 Olomoucká 39 kódovaná 16-ti bity

Příklad: Napište regulární výraz, který potvrdí, že se v řetězci nachází alespoň jedna samohláska a, e, i, o, u, y. Například: strč prst skrz krk ahoj světe Řešení: [aeiouy]

Jen vybrané znaky - rozsah Často nemusíme do hranatých závorek vypisovat všechny znaky, které potřebujeme ošetřit, ale použít rozsah Například: Lze kombinovat: [0-9] místo [0123456789] [a-z] místo [abcdefghijklmnopqrstuvwxyz] [A-Z] místo [ABCDEFGHIJKLMNOPQRSTUVWXYZ] [0-9a-dA-D] místo [0123456789abcdABCD]

Příklad: Napište regulární výraz, který vyhodnotí, zda se v řetězci nachází časový údaj ve tvaru HH:MM. Například: 16:15 08:59 00:01 Řešení: [0-2][0-9]:[0-5][0-9]

Negace Chceme-li vybrat znaky, které naopak nechceme, můžeme použít negaci. Značí se stříškou ^ a píše se hned za otevírací hranatou závorku, např. [^abc] [^A-Z] a ABC AbC

PŘÍKLAD: Negace [^1][^ ][0-3] 123 953 9 3-123

Jak zapsat speciální znaky jako je např. tečka? Pokud mají znaky speciální význam a my jej chceme pro daný případ potlačit, připíšeme před ně zpětné lomítko \ Atd\. jablko, hruška atd. jablko, hruška atd atd

Příklad č. 1: Napište regulární výraz, který vyhodnotí, zda řetězec obsahuje tři tečky. Například: leden, únor, březen Řešení: \.\.\.

Příklad č. 2: Napište regulární výraz, který vyhodnotí, zda se v řetězci nachází číslice v hranatých závorkách Například: [5] Řešení: \[[0-9]\]

Co když napíšeme do hranatých závorek metaznaky plnící speciální funkci? Pokud je ve výčtu (v hranatých závorkách) uvedena tečka, je brána jako normální znak. a se zpětným lomítkem se nepíše. Pokud je ve výčtu uvedena stříška ^ na jiné pozici než ihned za otevírací hranatou závorkou [, je rovněž brána jako normální znak. [.#^][a-z] ^x z-(x.y)

Počátek a konec Pokud chceme ověřovat znaky na začátku řetězce, použijeme na počátku stříšku ^. Pro určení konce řetězce zase na konci dolar $. ^den$ den dobrý den

PŘÍKLAD: Počátek a konec [0-9]$ náměstí Svobody náměstí Svobody 18 agent 007 1

Opakování výrazu pomocí hvězdičky I. Pomocí kvantifikátoru * bude regulární výraz opakován kolikrát to jen bude možné (0x až n-krát) [0-9]* 646541216546541231123 9. třída dobrý den

PŘÍKLAD 1: Opakování výrazu pomocí * I. Napište regulární výraz, který potvrdí, že se v řetězci nacházejí samotná čísla (nebo je prázdný) Řešení: ^[0-9]*$

PŘÍKLAD 2: Opakování výrazu pomocí * I. ^[0-9][^0-9]*$ 1 slon 10 slonů 1 slon a 1 zebra 1

Opakování výrazu pomocí hvězdičky II. Zápis.* znamená libovolný řetězec znaků ^[0-9].*[0-9]$ 0 jedna 2 0 jedna dvě 01 0

PŘÍKLAD 1: Opakování výrazu pomocí * II. Napište regulární výraz, který potvrdí, že se v řetězci nachází věta začíná velkým písmenem nebo číslem a končí tečkou. (Pomiňte, že vět v řetězci může být víc za sebou.) Například: Ahoj světe. Řešení: ^[A-Z0-9].*\.$

Opakování pomocí plus Pomocí kvantifikátoru + bude regulární výraz opakován minimálně jedenkrát (1x až n-krát) [0-9]+ Kill Bill Kill Bill 2

PŘÍKLAD: Opakování pomocí plus Napište regulární výraz, který ověří, že se zadaná přezdívka skládá jen z malých písmen bez diakritiky, která mohou být rozdělena podtržítkem _. Délka přezdívky je minimálně 2 znaky a podtržítko nemůže být na první pozici. Například: jirka jirka_novak _jirka Jirka_Novak Řešení: ^[a-z][a-z_]+$

Opakování pomocí otazníku Pomocí kvantifikátoru? bude regulární výraz opakován maximálně jednou (0x nebo 1x) ^škola?$ škola škol střední škola

PŘÍKLAD: Opakování pomocí otazníku pr?.*gram programátor pentagram pět gramů

Určený počet opakování I. Chceme-li vymezit přesný počet opakování, použijeme zápis {x} ^x{2}$ x xx xxx xxxx

Určený počet opakování II. Chceme-li vymezit rozsah, kolikrát se může výraz maximálně opakovat, použijeme složené závorky {x,y} ^x{2,3}$ x xx xxx xxxx

Určený počet opakování III. Chceme-li vymezit rozsah způsobem minimálně x-krát, použijeme zápis {x,} ^x{2,}$ x xx xxx xxxx

PŘÍKLAD 1: Určený počet opakování mate{0,3}matika matematika automat a automatika mate mě matematika

PŘÍKLAD 2: Určený počet opakování Napište regulární výraz, který ověří, že zadaný řetězec má minimálně 4 znaky. Řešení: ^.{4,}$

Jedno, nebo druhé Použitím svislé čáry, která má význam logického OR, bude platit jen určitá hodnota z daného výčtu. ^a b c$ a b c d

Seskupování pomocí kulatých závorek Kulaté závorky () používáme k vytvoření podvýrazu. Dojde k seskupení jednotlivých částí řetězce a doplněné kvantifikátory * +? se pak budou vztahovat na celý podvýraz. (kočka pes)+ Na dvorku si hraje kočka. Na dvorku si hraje pes. Na dvorku si hrají kočky a psi. Na dvorku si nikdo nehraje.

PŘÍKLAD: Seskupování pomocí kulatých Napište regulární výraz, který ověří, že jsou v řetězci pouze čísla v rozsahu 0 99 a za každým číslem se nachází čárka. Například: 1,8, 11,1,22,2, Řešení: ^([0-9]{1,2},)+$

Začátek a konec slova Zda stojí slovo samostatně můžeme ověřit pomocí metaznaků [[:<:]] a [[:>:]], které označují začátek a konec slova. Samozřejmě je možné použít každý z nich nezávisle. [[:<:]]svět[[:>:]] svět kolem nás ahoj světe Takový je svět.

Třídy znaků I. Třídy jsou skupiny znaků, které pro snadnější práci s regulárními výrazy přednastavili sami autoři jazyka PHP. Syntaxe: [[:název třídy:]] Jednotlivé třídy: alnum alpha písmena anglické abecedy a desítkové číslice písmena anglické abecedy

Třídy znaků II. lower upper digit xdigit punct blank space malá písmena anglické abecedy velká písmena anglické abecedy čísla (desítková soustava) čísla (šestnáctková soustava) interpunkční znaménka a další znaky (závorky, zavináče atd.) mezera a tabulátor prázdné znaky (mezera, tabulátor, nová řádka, nová stránka atd.)

Třídy znaků III. cntrl print graph řídící znaky (\n, \t atd.) tisknutelné znaky tisknutelné znaky bez mezer Ukázkový příklad na třídu znaků Regulární výraz pomocí tříd, který ověří, že řetězec je číslo desítkové soustavy. ^[[:digit:]]+$

PŘÍKLAD: Třídy znaků Napište základní regulární výraz, který zkontroluje platnost e-mailové adresy Řešení: ^[a-za-z0-9.]+@[[:alnum:]]+\.[[:alnum:]]{2,4}$

OBECNÝ PŘÍKLAD Č. 1: Napište regulární výraz, který ověří, že uživatelem zadané znaky splňují tyto nároky na heslo: pouze číslice a malá písmena minimální délka 4 znaky první 3 znaky musejí být číslice Řešení: ^[0-9]{3}[a-z0-9]+$

OBECNÝ PŘÍKLAD Č. 2: Napište regulární výraz, který ověří, že uživatel zadal číslo (i z více číslic) a pokud ano, tak že nezačíná nulou nebo nulami. Například: 42 042 Řešení: ^[1-9]{1}[0-9]*$

OBECNÝ PŘÍKLAD Č. 3: Napište regulární výraz, který potvrdí, že se v řetězci nenachází žádná mezera. Řešení: ^[^ ]*$

3. parametr u funkcí mb_ereg() a mb_eregi() Třetím, nepovinným parametrem těchto funkcí je pole shod. Do něj se uloží ty části řetězce, které vyhovují danému podvýrazu regulárnímu výrazu (podvýraz je v kulatých závorkách). V indexu [0] pole se uloží ta část řetězce, která vyhovuje celému regulárnímu výrazu. Například: <? if (mb_ereg("(ahoj) světe (veliký)","ahoj světe veliký",$pole)) print_r($pole); // vypíše: Array ([0]=>ahoj světe veliký [1]=>ahoj [2]=>veliký)?>

PŘÍKLAD: Třetí parametr u funkcí Doplňte regulární výraz, díky kterému bude možné vypsat první číslo (i z více číslic), které se v řetězci objeví. <? if ( mb_ereg (...","James Bond, agent 007.",$pole) ) echo $pole[1];?> V tomto případě bude vypsáno: 007 Řešení: ^[^0-9]*([0-9]*).*$

mb_ereg_replace() a mb_eregi_replace() I. Tyto funkce se opět liší jen citlivostí na velikost písmen. Mají tuto syntaxi: mb_ereg_replace(regulární výraz, náhrada, pův.řetězec) Příklad: <? $a = mb_ereg_replace ("(ahoj) světe", "nazdar", "ahoj světe"); echo $a; // vypíše: nazdar?>

mb_ereg_replace() a mb_eregi_replace() II. Ve druhém parametru určujícím nahrazovaný řetězec lze použít metaznak \\číslice určující podvýraz regulárního výrazu. Například: <? $a = mb_ereg_replace ("(ahoj) (světe) (veliký)", "\\3 \\2 \\1", "ahoj světe veliký"); echo $a; // vypíše: veliký světe ahoj?>

PŘÍKLAD: Funkce ereg_replace() a Pomocí funkce mb_eregi_replace nahraďte v textu [B] a [/B] za HTML tagy <B> a </B>. Například: Řešení: <??> následující bude tučně: [B]výraznější text[/b] změnit na následující bude tučně: <B>výraznější text</b> $text = "následující bude tučně: [B]výraznější text[/b]"; echo mb_ereg_replace ("\[B\](.*)\[/B\]*", "<B>\\1</B>", $text); pokračování

Hladovost daný příklad sice bude u naší testovací věty fungovat, nicméně stačilo by do řetězce doplnit další prvky pro zvýraznění textu a výraz nesplní, co očekáváme: následující bude tučně: [B]výraznější text[/b] a další [B]tučný[/B] Při použití stejného regulárního výrazu výsledkem bude: následující bude tučně: <B>výraznější text[/b] a další [B]tučný</B> Důvod je prostý regulární výraz se snaží obsáhnout co nejvíce znaků z řetězce a za koncové [/B] tak vezme až následující bude tučně: [B]výraznější text[/b] a další [B]tučný[/B] Tuto skutečnost je třeba mít při sestavování výrazů na paměti.

Funkce split() a spliti() Tyto funkce umějí rozdělit řetězec na několik částí a ty pak uložit do jednotlivých prvků pole. Mají tuto syntaxi: split (regulární výraz, řetězec, [limit]) Řetězec je rozložen podle regulárního výrazu (na maximální počet částí, které udává limit) Například (rozdělení řetězce po slovech a uložení do pole): <??> $pole = split ("[[:blank:]]+", ahoj světe veliký"); print_r ($pole); // vypíše: Array ( [0] => ahoj [1] => světe [2] => veliký )