Differences

This shows you the differences between two versions of the page.

Link to this comparison view

preg_match [2015-09-10 08:49]
127.0.0.1 external edit
preg_match [2017-09-01 14:54]
Line 1: Line 1:
-====== PHP:s "regular expression"  ====== 
-Det har kommit upp några frågor om hur man kan kolla om ett lösenord bara innehåller siffor och bokstäver, eller hur man kollar om en e-postadress är korrekt. Det bästa sättet tycker jag är att lära sig "regular expressions". PHP stöder två typer av "regular expression". 
-  * preg - som är en PHP wrapper av PCRE library (Perl-Compatible Regular Expressions).  
-  * ereg - som bygger på POSIX Extended Regular Expressions från 1986, det har hänt mycket sen dess. 
- 
-== ereg vs preg == 
-När man skall jobba med "regular expression" i PHP så tycker jag att man skall jobba med preg funktioner. De är för det mesta dubbelt så snabba och klarar av mer avancerade saker, dessutom verkar det som om ereg är på väg bort från PHP. Kan idag inte komma på någon anledning att använda ereg funktionerna. 
- 
-Läs mer om [[http://www.php.net/manual/en/ref.pcre.php|preg-funktoner]] och om [[http://se2.php.net/reference.pcre.pattern.syntax|syntax]]. 
- 
- 
-== Några lätta exempel för att komma igång. == 
-<code php> 
-$preg = "/exempel/"; // Avgränsare får inte vara alphanumeric eller backslash... Allt annat verkar funka! 
-$string = "Några lätta exempel för att komma igång."; 
-if (preg_match($preg, $string)) { 
- echo "Success: '$preg' matchar '$string'<br>"; 
-} else { 
- echo "Error: '$preg' matchar inte '$string'<br>"; 
-} 
-// Skriver ut : Success: '/exempel/' matchar 'Några lätta exempel för att komma igång.' 
- 
-// Sen när man kan "regular expression" så är kan man även använda preg_replace... 
-$string = preg_replace ($preg, 'saker', $string); 
-echo "'$string'<br>"; 
-// Skriver ut: 'Några lätta saker för att komma igång.' 
- 
- 
-/*  
-Om man vill göra lite krångligare saker så måste man känna till lite mer. 
-^ - används för start 
-$ - används för slut 
- 
-. - betyder valfritt tecken, vill man ha just en . använd \.   
-Använd \ för alla dessa tecken: \ ^ . $ | ( ) [ ] * + ? { } , 
-* - 0 eller fler tecken 
-+ - 1 eller fler tecken 
-? - 0 eller ett tecken 
-{3} - 3 tecken 
-{3,} - Minst 3 tecken 
-{3,6} 3 till 6 tecken 
- 
-(hej) - en sekvens ex: (hej){1,3} matchar hej, hejhej, hejhejhej 
-| - Funkar som or ex: "(b|cd)ef": matchar "bef" eller "cdef". 
- 
-[] Godkänner allt inom [] som match. ex: [abc] matchar a, b eller c, [abc] är samma sak som (a|b|c) 
-[0-9] - Matchar en siffra 
-[a-z] - Matchar en bokstav mellan a till z 
-[a-zåäö] - Matchar våra svenska små bokstäver 
-[0-9a-zA-ZåäöÅÄÖ] - Matchar siffor och våra svenska bokstäver, både stora och små. 
- 
-^ - kan också betyda inte ex: "/^[^abc]*$/" matchar så länge inget av a, b eller c är med 
- 
-Sen är det bara att kombinera alla saker ovan så kommer du nog att kunna matcha det mesta ;-) 
-*/ 
- 
-// och nu något man kan ha nytta av... 
-$preg = "/http:\/\/([0-9a-z-\._]*)/"; 
-$string = "En länk till Parkskolans hemsida (http://www.park.se) som vi vill göra klickbar!"; 
-$replace = '<a href="http://$1">$1</a>'; 
-echo preg_replace ($preg, $replace, $string); 
-// Skriver ut: En länk till Parkskolans hemsida (<a href="http://www.park.se">www.park.se</a>) som vi vill göra klickbar! 
- 
-// och allra sist något man troligen inte har nytta av ;-) 
-$preg = "/.*(Ett).*(hej).*(hå).*/"; 
-$string = "Hå och hej, Ett hej och hå, hej säg så"; 
-$replace = "$1 $3 och $2"; 
-echo preg_replace ($preg, $replace, $string); 
-// Skriver ut: Ett hå och hej 
-</code> 
- 
-== Nu skall ni skriva några "Regular Expressions" som matchar följande: == 
-  - Bara små bokstäver (a-z) och 4-6 tecken. 
-  - Bara små bokstäver a-z och siffror, dock minst 8 tecken. 
-  - Ett heltal mellan 0-999. 
-  - En korrekt E-post adress. (Jag tycker att en korrekt e-post adress bara får innehålla a-z,0-9 punkt(.), underline(_) och tankesträck(-) före @ och efter bara a-z,0-9 punkt(.) och tankesträck(-) fastän RFC:n tillåter fler tecken...) 
-  - Ett heltal mellan 0-255. 
-  - Datum på formen yyyy-mm-dd mellan 1900-01-01 och 2099-12-31, det är ok att alla månader kan ha 31 dagar... 
- 
- 
- 
- 
-<php> 
- 
-// 1. $preg = "/^[a-z]{4,6}$/"; 
-// 2. $preg = "/^[a-z0-9]{8,}$/"; 
-// 3. $preg = "/^[0-9]{1,3}$/"; 
-// 4. $preg = "/^[a-z0-9\._-]*@[a-z0-9\.-]*\.[a-z0-9]*$/"; 
-// 5. $preg = "/^([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])$/"; 
-// 6. $preg = "/^(19|20)[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/"; 
- 
-// rename -vn 's/fil/kalle/' * 
-// rename -vn 's/([0-9]).txt/Nummer$1.bak/' * 
-//  
-/* 
-Ex när man kan ha nytta av att kunna regexp\\ 
-1. Här finns en {{:se.tgz|fil}} med en massa ord. Använd den för få lite hjälp med vilka ord du kan lägga med bokstäverna TLAPCOY. Tips grep hanterar regexp (-P, --perl-regexp)\\ 
-2. Du har 9 filer som heter fil1.txt, fil2.txt, .., fil9.txt (tips rename s/regexp_old/new/ filematch)\\ 
- a. Du skall byta namn på dessa till  kalle1.txt,  kalle2.txt, ... , kalle9.txt\\ 
- b. Du skall byta namn på dessa till  fil_Nummer_1.bak,  fil_Nummer_2.bak, ...,  fil_Nummer_9.bak\\ 
- 
-*/ 
-</php>