20
Regularni izrazi

Regularni Izrazi Pp

Embed Size (px)

DESCRIPTION

re

Citation preview

Page 1: Regularni Izrazi Pp

Regularni izrazi

Page 2: Regularni Izrazi Pp

Regularni izrazi obezbjeđuju algebarski (deklarativni)opis nekog regularnog jezika, tj. oni generišu riječi kojepripadaju datom jeziku

Regularni jezik je skup sekvenci simbola nekog alfabeta

Formiranje regularnih izraza vrši se kao i kod svakealgebre – upotrebom operatora nad konstantama ipromjenljivima koje predstavljaju neke jezike

Primjena regularnih izraza: pronalaženje uzoraka u testu(find, search, replace, leksička analiza)

2

Page 3: Regularni Izrazi Pp

[abcd] : a+b+c+d UNIJA

[a-z] : a+b+c+…+z UNIJA KAO INTERVAL

abc|def : abc+def UNIJA RIJEČI

(abc)? : (ε+abc) TAČNO JEDNO PONAVLJANJE

(abc)+ : abc(abc)* JEDNOM ILI VIŠE PUTA

(abc)* : (abc)* NULA ILI VIŠE PUTA

\”, \(, \), \+, \*, \? … LITERALI

. BILO KOJI KARAKTER

^ POČETAK LINIJE

$ KRAJ LINIJE

3

Page 4: Regularni Izrazi Pp

Pojam izraz u zagradama predstavlja listu karaktera ispred koje senalazi [ , a iza koje se nalazi ]; on prihvata jedan karakter koji je u tojlisti, a ako je prvi karakter ^ onda prihvata bilo koji karakter koji nije utoj listi

Pojam izraz ranga predstavlja dva karaktera odvojena crtom (npr. [a-d])

* označava ponavljanje nula ili više puta, a + ponavljanje jednom ili višeputa

sa {min, max} se specifikuje koliko se puta token treba ponoviti, pričemu je min pozitivan cijeli broj koji indukuje minimalan brojprihvatanja, a max pozitivan cijeli broj koji indukuje maksimalan brojprihvatanja; ako se navede samo min broj i zarez poslije njega onda sepodrazumijeva da je max broj prihvatanja beskonačno (tako damožemo operator + definisati kao {1,}, a * kao {0,})

4

Page 5: Regularni Izrazi Pp

Postoje i tzv. alias-i (klase) predefinisani u okviru izraza u zagradama:

◦ [:upper:] A-Z

◦ [:lower:] a-z

◦ [:alpha:] [[:upper:] [:lower:]]

◦ *:punct:+ ! “ # $ % ^ & * + ( ) , - . / \ : ; < = > ? ‘ @ * + ~ , - |

◦ [:space:] tab, newline, vertical tab, form feed, CR, space

5

Page 6: Regularni Izrazi Pp

◦ [:digit:] 0-9

◦ [:blank:] space, tab

◦ [:alnum:] [[:alpha:][:digit:]]

◦ [:print:] (printable characters) [[:alnum:][:punct:]]

◦ [:graph:] (graphical characters) [[:alnum:][:punct:]]

◦ *:xdigit:+ 0+1+…+9+A+B+…+F+a+b+…+f

6

Page 7: Regularni Izrazi Pp

Sa \b se označava prazan string na početku, odnosnokraju riječi (npr. 012\b de prihvatiti kao ispravne riječi012, 43012, ali ne i 0123)

Sa \< se označava prazan string na početku riječi, a sa\> prazan string na kraju riječi

Sa \w se označava znak koji čini riječ (sinonim je[[:alnum:]]), a sa \W znak koji ne čini riječ (sinonim je[^[:alnum:]])

7

Page 8: Regularni Izrazi Pp

Sa tzv. back-reference \N (npr. \1, \2, …) se označavapodudaranje sa podstringom koji je prethodno uparensa N-tim podizrazom (izrazom između zagrada)regularnog izraza

Npr. Regularni izraz (a.) \1 zadovoljavaju riječi abab, acac, ali ne iabac.

8

Page 9: Regularni Izrazi Pp

Grep razumije dve vrste regularnih izraza: extended(egrep) i basic (grep)

Znakovi ‘?’, ‘+’, ‘{’, ‘}’, ‘|’, ‘(’ i ‘)’ gube specijalnoznačenje u osnovnim regularnim izrazima, pa semoraju koristiti sa prefiksom ‘\’:

‘\?’, ‘\+’, ‘\{’, ‘\}’, ‘\|’, ‘\(’ i ‘\)’

9

Page 10: Regularni Izrazi Pp

Osnovni oblik komande sed je:sed –r –e “s/REGEX/REPLACEMENT/*FLAGS+ input_file

>output_file

Gdje je: s oznaka za search, REGEX predstavlja regularni izraz kojise traži u ulaznom file-u, a REPLACEMENT predstavlja riječkojom se mijenja pronađena riječ koja zadovoljava regularniizraz.

10

Page 11: Regularni Izrazi Pp

Ono što je karakteristično za sed je da prestajepretraživati liniju nakon što naiđe na prvo poklapanje

Ukoliko postavimo FLAG g (global) obezbijedidemo dase sed izvrši do kraja linije

U REPLACEMENT-u se mogu koristiti i back-reference

11

Page 12: Regularni Izrazi Pp

Izvršiti zamjenu svake cifre [0-9] u ulaznom file-u riječju cifra.

1. sed –re “s\[0-9]/cifra” input.txt

2. sed –re “s\[0-9]/cifra/g” input.txt

Ukoliko nam je input.txt dat kao1

12

123

kao output dobijamo sljedede:

12

Page 13: Regularni Izrazi Pp

1. cifracifra 2cifra 2 3

2. cifracifra cifra cifra cifra cifra

Razlika je u tome što u prvom slučaju, bez postavljanjaFLAG-a g sed prekida pretraživanje nakon prvogpoklapanja, a u drugom slučaju sa postavljenim FLAG-om g nastavlja do kraja linije.

13

Page 14: Regularni Izrazi Pp

sed –re “s/ \b(.?)(.?)(.?)(.?)(.?)\b/\5\4\3\2\1/g” infile.txt

infile.txtjedan dva tri jedanaest

outputnadej avd irt jedanaest

14

Page 15: Regularni Izrazi Pp

REGEX tekst prepoznato

? a(bc)? abcabc, nikad

a

*

a* aaaaaa, nikad

a ili aa

\”.*\” “ab”cd”ef”“ab”cd”ef”,

nikad cd

15

Page 16: Regularni Izrazi Pp

((\b[0-9]+)?\.)?\b[0-9]+([eE][-+]?[0-9]+)?\b

• Ulaz– 12.6E-12

– e45

– 2359

– -11ek

– 99e9

• Izlaz ?

Page 17: Regularni Izrazi Pp

\b[1-9][0-9]{3,5}\b

Ulaz◦ 23nb2345

◦ 1230

◦ 99222

◦ 999999992

Izlaz ?

Page 18: Regularni Izrazi Pp

(18|19)[0-9][0-9][-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])

Ulaz◦ Danas je 1999-07-20, a kolokvijum je bio nekad davno 1898.07-21.

◦ Semestar zavrsava 12-06-2009.

Izlaz ?

Page 19: Regularni Izrazi Pp

\b[3-5]\b|[3-4][.][0-9]+

• Ulaz– 3.56

– 78

– 1.2

– 4

– 4.678

• Izlaz ?

Page 20: Regularni Izrazi Pp

^[\_]*([a-z0-9]+(\.|\_*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$

Ulaz◦ [email protected]

◦ marko.markovic@

◦ milan@etfbl.

[email protected]

Izlaz ?