java util regex Regulrn vrazy jsou standardnm prostedkem
- Slides: 8
java. util. regex Regulární výrazy jsou standardním prostředkem pro definici regulárních jazyků, konečných automatů a některých textových vyhledávacích strojů. Podrobnosti viz: http: //java. sun. com/docs/books/tutorial/essential/regex/ PJV 25 1
Třída Matcher Objekt typu Matcher je vyhledávací stroj. Jeho konstruktory jsou mimo balíček java. util. regex nepoužitelné. Matcher se získá metodu z třídy Pattern. Metody: boolean int String PJV 25 find( … ) looking. At( … ) matches( … ) group. Count( ) - počet skupin počítaných dle otvíracích závorek replace. All( String replacement ) replace. First( String replacement ) 2
([{^-$|}]) ? *+. Jsou metaznaky mající následující význam: ^ ~ negace, hraniční značka začátek řádku $ ~ hraniční značka konec řádku ~ interval | ~ alternativa ~ citace následujícího znaku, Q …E závorky citace () ~ zachycovací skupina = capturing group [] ~ množina znaků {} ~ kvantifikace ? ~ <= 1 * ~ >= 0 + ~ >= 1 && ~ průnik množin PJV 25 3
Příklady Predefinované znakové třídy: . ~ kterýkoli znak d ~ číslice [0 -9] , D non- tj. [^0 -9] s ~ whitespace [tnx 0 Bfr] , S non- tj. [^s] w ~ znak ve slově tj. [0 -9 a-z _A-Z] , W non- [^w] abc ~ příklad přímého řetězu - vyhledání bez překrývání [0 -4 a-m. A-M] ~ číslice či písmeno z první poloviny [^1 -3] – kterýkoli znak kromě 1, 2 a 3 [0 -9[A-F]] ~ hexadecimální číslice sjednocením [d&&[^8 -9]] ~ oktalové číslice rozdílem čitelněji však [0 -7] ( [ ^, / ] )+ - jakýkoli znak krom , a /. Vrátí skupinu bez těchto separátorů ( [ ^, / ] )* - totéž avšak navíc vrací prázdný řetěz místo oněch separátorů. + či. * PJV 25 4
Kvantifikátory pro greedy reluctant possessive <=1 X? X? + >=0 X* X*? X*+ >=1 X+ X+? X++ =n X{n}? X{n}+ >=n X{n, }? X{n, }+ n<= i <=m X{n, m}? X{n, m}+ X zastupuje jediný znak či [ ] - množinu znaků či ( ) - skupinu Např. : rst+ či [rst]+ či (rst)+ či rst{3} je X=t je X=[rst] - skupinu . *? ab - skupiny se sufixem ab greedy – hladový, nenasytný, reluctant – zdráhavý, váhavý, possessive – vlastnící, lakomý PJV 25 5
java. lang. regex Runtime Exception Illegal. Argument Match. Result Matcher PJV 25 Exception Pattern. Syntax Exception 6
Příklad vyhledání String patt = " [ A-Za-z ] + " ; // WORD String text = " Searched text " ; Pattern p = Pattern. compile( patt ); Matcher m = p. matcher( text ); for ( int i = end =0; m. find( end ); end = m. end( ), i++ ) { String w = text. substring( m. start( ), m. end( ) ); …. } PJV 25 7
Příklad lexikální analýzy String patt = " ( [ 0 -9 ] + ) " " ( [ " ] [. [ ^" ] ]*[ " ] ) " "([(])" "([)])" " ( \p{Punct} ) " " ( [ a-z. A-Z ][ a-z. A-Z 0 -9 ]* ) " " ( [ ]* ) " +"|"+ +"|"+ ; // UNSIGNED NUMBER // QUOTE // BRA // KET // OTHER // ID // BLANK Pattern p = Pattern. compile( patt ); Matcher m = p. matcher( " searched text " ); while( m. find( ) ) { String g = m. group( ); … } PJV 25 8