Upload
stefo2693
View
33
Download
1
Embed Size (px)
DESCRIPTION
re
Citation preview
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◦ [email protected]
◦ marko.markovic@
◦ milan@etfbl.
Izlaz ?