java util regex Regulrn vrazy jsou standardnm prostedkem

  • Slides: 8
Download presentation
java. util. regex Regulární výrazy jsou standardním prostředkem pro definici regulárních jazyků, konečných automatů

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.

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

([{^-$|}]) ? *+. 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] ,

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

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.

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

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ří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