regularni izrazi pp

Post on 26-Dec-2015

39 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

re

TRANSCRIPT

Regularni izrazi

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

[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

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

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

◦ [: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

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

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

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

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

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

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

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

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

infile.txtjedan dva tri jedanaest

outputnadej avd irt jedanaest

14

REGEX tekst prepoznato

? a(bc)? abcabc, nikad

a

*

a* aaaaaa, nikad

a ili aa

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

nikad cd

15

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

• Ulaz– 12.6E-12

– e45

– 2359

– -11ek

– 99e9

• Izlaz ?

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

Ulaz◦ 23nb2345

◦ 1230

◦ 99222

◦ 999999992

Izlaz ?

(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 ?

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

• Ulaz– 3.56

– 78

– 1.2

– 4

– 4.678

• Izlaz ?

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

Ulaz◦ dijana@urc.bl.ac.yu

◦ marko.markovic@

◦ milan@etfbl.

◦ marko@spinter.net

Izlaz ?

top related