Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Regulære uttrykk. Regex En streng som beskriver eller korrelerer til en mengde strenger, dvs. én eller flere. Korrelasjonen bestemmes av mønsteret i denne.

Liknende presentasjoner


Presentasjon om: "Regulære uttrykk. Regex En streng som beskriver eller korrelerer til en mengde strenger, dvs. én eller flere. Korrelasjonen bestemmes av mønsteret i denne."— Utskrift av presentasjonen:

1 Regulære uttrykk

2 Regex En streng som beskriver eller korrelerer til en mengde strenger, dvs. én eller flere. Korrelasjonen bestemmes av mønsteret i denne strengen, som er underlagt regler. En streng som beskriver eller korrelerer til en mengde strenger, dvs. én eller flere. Korrelasjonen bestemmes av mønsteret i denne strengen, som er underlagt regler. Mye brukt i mange programmeringspråk, deriblant C/C++, Perl, Java,…,PHP Mye brukt i mange programmeringspråk, deriblant C/C++, Perl, Java,…,PHP Stort felt – trenger ikke nødvendigvis kunne alle aspekter for å bruke det Stort felt – trenger ikke nødvendigvis kunne alle aspekter for å bruke det

3 Eksempel 1 Vi vil finne ut som en bruker har tastet inn en gyldig e-post adresse, basert kun på syntaks: Vi vil finne ut som en bruker har tastet inn en gyldig e-post adresse, basert kun på syntaks:

4 Eksempel 1 Intuitiv måte å gjøre denne oppgaven på: Intuitiv måte å gjøre denne oppgaven på: –Lage en løkke som tar for seg strengen –Opprette et ”bokholderi”, for eksempel sjekke at den inneholder kun lovlige tegn, en og bare lovlige tegn, et ”.” og en sekvens av lovlige tegn med to, tre eller fire tegn

5 Eksempel 1 $str = for( $i = 0; $i < strlen( $str ); $i++ ) { $sc = $str[ $i ]; $sc = $str[ $i ]; if( !check_char( $sc ) ) if( !check_char( $sc ) ) { echo "Invalid character $sc "; echo "Invalid character $sc "; }} function check_char( $str ) { $valid = false; $valid = false; $value = ord( $str ); $value = ord( $str ); if( ( $value > 47 && $value 63 && $value 47 && $value 63 && $value < 90 ) || ( $value > 96 && $value 96 && $value < 122 ) || $value != 46 || $value != 95) { $valid = true; $valid = true; } return $valid; return $valid;}

6 Eksempel 1 Tungvindt, ressurskrevende og uoversiktlig Tungvindt, ressurskrevende og uoversiktlig I tillegg sjekker vi ikke for mønster I tillegg sjekker vi ikke for mønster –x antall tegn, og (alternativt) ”.” + x antall tegn så mange ganger vi vil –x antall tegn, og (alternativt) ”.” + x antall tegn så mange ganger vi vil –Tilslutt: ”.” + 2, 3 eller 4 bokstaver

7 Konklusjon eks. 1 Det må / burde finnes en bedre måte Det må / burde finnes en bedre måte Det gjør det, heldigvis. Det gjør det, heldigvis. Svaret er regulære uttrykk (Regex) Svaret er regulære uttrykk (Regex)

8 Eksempel 2 Denne ”strengen” følger et mønster, likt det som ble beskrevet for to slider siden Denne ”strengen” følger et mønster, likt det som ble beskrevet for to slider siden En regex-streng som ville korrelere til denne: En regex-streng som ville korrelere til denne: 9]+)*\.[a-zA-Z]{2,4} Snart vil denne være like selvsagt for deg som 呀, 呀, 祖 母 er for en kineser Snart vil denne være like selvsagt for deg som 呀, 呀, 祖 母 er for en kineser

9 Verktøy Regex-coach for win32 (gratis) Regex-coach for win32 (gratis)

10 Bruksområder Parse en html-side, f. eks ”låne” aftenposten.no’s valutakurser Parse en html-side, f. eks ”låne” aftenposten.no’s valutakurser Hente ut annen info fra en tekstfil Hente ut annen info fra en tekstfil Validere input Validere input Avansert søkning og erstatting i tekst (jmf. str_replace()) Avansert søkning og erstatting i tekst (jmf. str_replace())

11 Matche enkelt-tegn. = ett enkelt tegn, bortsett fra []\^$.|?*+(). = ett enkelt tegn, bortsett fra []\^$.|?*+() a = a, b = b etc. (0-9) a = a, b = b etc. (0-9) [abc] = a eller b eller c [abc] = a eller b eller c [^abc] = alt annet enn a,b og/eller c [^abc] = alt annet enn a,b og/eller c \ tegn= escape \ tegn= escape \d= numerisk tegn \d= numerisk tegn \s= whitespace (mellomrom, linjeskift etc) \s= whitespace (mellomrom, linjeskift etc)

12 Eksempel ”php” matches av: ”php” matches av: –^php, [ph]+, php$ og ^php$,.,.{3},.+ Dette er en setning Dette er en setning –[setnig]+, $setning –Ikke: ^setning (hvorfor kommer senere) IPV4: IPV4: –(\d{1,3}\.){3}(\d{1,3})

13 Kvantifikatorer ?Kun en tillatt, men ikke påkrevet ?Kun en tillatt, men ikke påkrevet * Mange tillatt, men ikke påkrevet * Mange tillatt, men ikke påkrevet + En påkrevet, men mange tillatt + En påkrevet, men mange tillatt {a,b} a påkrevet, b tillatt {a,b} a påkrevet, b tillatt {a} a påkrevet {a} a påkrevet

14 Eksempel Et ord på minst 3, maks 10 bokstaver Et ord på minst 3, maks 10 bokstaver –.{3,10} Et ord på 5 bokstaver, som består av tegnene n, o, r, g og e Et ord på 5 bokstaver, som består av tegnene n, o, r, g og e –[norge]{5}, [groen]{5} matcher norge, groen etc c+ minst én c, men sa mange man vil c+ minst én c, men sa mange man vil c* så mange man vil, inkludert 0 c* så mange man vil, inkludert 0 c? en eller ingen c? en eller ingen

15 Posisjoner ^Posisjonen ved linjestart ^Posisjonen ved linjestart $Posisjonen ved linjeslutt $Posisjonen ved linjeslutt \Posisjonen ved ord-slutt \>Posisjonen ved ord-slutt

16 Eksempel Dette er en streng Dette er en streng –^en –\

17 Annet |or, dvs. gruppering av flere uttrykk |or, dvs. gruppering av flere uttrykk (..) Gruppering for kvanitifikatorer (bla.a) (..) Gruppering for kvanitifikatorer (bla.a)

18 Eksempel (\d{10,15}) | (\d{3,5}) (\d{10,15}) | (\d{3,5}) [ a-fA-F] [ a-fA-F]

19 En liten oppgave Hvorfor får vi ikke treff her: Hvorfor får vi ikke treff her: –q[^u] på Quantas og Iraq

20 En til På engelsk skrives farge slik: På engelsk skrives farge slik: –color og colour Skulle vi da søke etter dette ordet, hvordan er det smart å gå frem? Skulle vi da søke etter dette ordet, hvordan er det smart å gå frem? Først color, så colour? Først color, så colour? Eller: col[ou]{2}r? -> også coluor Eller: col[ou]{2}r? -> også coluor Bedre med col(o|ou)r Bedre med col(o|ou)r

21 Mer… Vi kan skrive , eller ”én million” (revisorer skriver 15 tusen i stedet for ) Vi kan skrive , eller ”én million” (revisorer skriver 15 tusen i stedet for ) Lag et regex som matcher! Lag et regex som matcher!

22 Tidsangivelse Klokken skrives typisk slik: (i USA) Klokken skrives typisk slik: (i USA) –9:17 am, 12:30 pm [0-9]?[0-9]:[0-9] [0-9] (am|pm) [0-9]?[0-9]:[0-9] [0-9] (am|pm) plukker opp de to foregående, men også 99:99 pm plukker opp de to foregående, men også 99:99 pm Riktig er: (1[012]|[1-9]):[0-5][0-9] (am|pm) Riktig er: (1[012]|[1-9]):[0-5][0-9] (am|pm) Utvid til å gjelde 24-timers tidsangivelse Utvid til å gjelde 24-timers tidsangivelse [01]?[0-9]|2[0-3] [01]?[0-9]|2[0-3]

23 Hvordan bruker vi dette ifb. php ereg( ” ”, $streng [, grupper] ) ereg( ” ”, $streng [, grupper] ) eregi ( ” ”, $streng [, grupper] ) eregi ( ” ”, $streng [, grupper] ) ereg_replace( ” ”, ” ”, $streng ) ereg_replace( ” ”, ” ”, $streng ) eregi_replace( ” ”, ” ”, $streng ) eregi_replace( ” ”, ” ”, $streng ) split( ” ”, $streng [, grense] ) split( ” ”, $streng [, grense] ) spliti( ” ”, $streng [, grense] ) spliti( ” ”, $streng [, grense] )

24 Eksempel Gyldig e-post adresse? Gyldig e-post adresse? ereg returnerer 0/1 på grunnlag av match eller ei ereg returnerer 0/1 på grunnlag av match eller ei

25 Et annet eksempel Erstatte ord i en tekst Erstatte ord i en tekst Kari Bremnes han hadde en bondegård Kari Bremnes han hadde en bondegård Vi husker str_replace() fra forrige gang? Vi husker str_replace() fra forrige gang?

26 Enda et $str = "Jeg husker den gangen jeg red et esel som hesebleste i Estland"; $str = split( "e", $str ); foreach( $str as $value ) echo $value." \n"; echo $value." \n";?> 0 => J 1 => g husk 2 => r d 3 => n gang 4 => n j 5 => g r 6 => d 7 => t 8 => s 9 => l

27 Grupper i regex $value ) { echo $key." => ".$value." \n"; echo $key." => ".$value." \n";}?> 0 => lig å være Norsk i Danmark lige så 1 => lig 2 => så

28 Spørsmål? Have a nice day!


Laste ned ppt "Regulære uttrykk. Regex En streng som beskriver eller korrelerer til en mengde strenger, dvs. én eller flere. Korrelasjonen bestemmes av mønsteret i denne."

Liknende presentasjoner


Annonser fra Google