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: ronnyma@math.uio.no ronnyma@math.uio.no ronnyma@math.uio.no kari.bremnes@fara.mexico.com kari.bremnes@fara.mexico.com kari.bremnes@fara.mexico.com

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 = "ronnyma@uio.no"; 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 ronnyma@math.uio.no ronnyma@math.uio.no ronnyma@math.uio.no 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: –[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*@[a-zA-Z0-9]+(\.[a-zA-Z0- 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 http://www.roblocher.com/technotes/regexp.aspx http://www.roblocher.com/technotes/regexp.aspx http://www.roblocher.com/technotes/regexp.aspx 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 –\ { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.no/8/2143598/slides/slide_16.jpg", "name": "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}) [1234567890a-fA-F] [1234567890a-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 1000000, 1 000 000 eller ”én million” (revisorer skriver 15 tusen i stedet for 15 000) Vi kan skrive 1000000, 1 000 000 eller ”én million” (revisorer skriver 15 tusen i stedet for 15 000) 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