Kunskapsbanken

Artiklar, guider, tips och trix tillsammans med exempelprogram inom webbprogrammering och webbutveckling. Inläggen är listade i den ordning som de senast uppdaterats.

Vad är Regex?

Regex är en förkortning av Regular Expression (reguljära uttryck) som är ett välkänt verktyg för att matcha textmönster. Det används oftast till att extrahera information från kod, loggfiler och andra texter.
I regex definieras ett mönster av karaktärer som regex sedan försöker hitta/matcha i en sträng eller text.

Om ni har svårt att förstå ett regex mönster eller ni vill testa mönstret på en text, snabbt och lätt, rekommenderar jag sidan https://regex101.com/. Du skriver in ett mönster och en text där förklarar de olika delarna i mönstret och visar på ett bra sätt vad som matchas.

Notera dock att den sidan använder andra flavours (PCRE, PHP, ES, Python, Golang etc).

Ett annat bra verktyg online är https://regexone.com/.

#Special Characters

I regex har vissa karaktärer en speciell betydelse, det är detta som gör att vi kan matcha mönster dynamiskt och inte enbart fasta strängar. Man kan inte ta för givet att alla speciella karaktärer fungerar i alla dialekter av regex, men det ger en fingervisning på vad som oftast finns tillgängligt.

#Characters

.(punkt): Matchar vilken karaktär som helst utom newline(\n). Kallas även wildcard.
^: Matchar början av en sträng.
$: Matchar slutet av en sträng.
|: Funkar som en “OR” operator.
[ ]: Matchar en av karaktärerna som har skrivits inom hakparenteserna.
[^ ]: Matchar en karaktär som inte har skrivits inom hakparenteserna.
\w (litet w): Matchar en alfanumerisk karaktär, alla bokstäver(stora och små), siffror och _(understreck). Kan även skrivas som [a-zA-z0-9_].
\W (stort W): Matchar en icke alfanumerisk karaktär, alltså en karaktär som inte matchas av \w. Kan även skrivas som [^a-zA-Z0-9_].
\d: Matchar en siffra. Kan även skrivas som [0-9].
\D: Matchar en karaktär som inte är en siffra. Kan även skrivas som [^0-9].
\s (litet s): Matchar en blank(whitespace) karaktär. Kan även skrivas som [ \t\n\r\f\v].
\S (stort S): Matchar en icke-blank(whitespace) karaktär. Kan även skrivas som [^ \t\n\r\f\v].
( ): Grupperar karaktärer i en matchad sträng. Det går att plocka ut grupper ur matchade strängar och det går även att refererar tillbaka till grupper i mönstren.
\: Används för att göra en specialkaraktär till en vanlig karaktär, t.ex. \. matchar en punkt istället för att fungera som ett wildcard, \* matchar en asterisk istället för att fungera som en repeterare och \( matchar en parentes istället för att starta en grupp. Det används även för att referera till en grupp, \1 refererar till grupp 1 och \2 till grupp 2. Grupper börjar på 1 och uppåt.

#Quantifiers

En så kallad quantifier används för att upprepa ett mönster ett visst antal gånger. Dessa tecken brukar antingen vara lazy eller greedy. Med lazy menas att det kommer vara det minsta antalet matchningar som tas med och greedy är motsatsen, så många matchningar som möjligt tas med.

?: Matchar noll eller en gång.
+: Matchar en eller flera gånger.
*: Matchar noll eller flera gånger.
{ }: Matchar en intervall.

#Character classes

En character class definieras av hakparenteser, [...]. I dem kan vi bestämma vilka bokstäver som ska matchas.

[a-z] matchar alla små bokstäver mellan a och z.
[A-Z] matchar alla stora bokstäver mellan A och Z.
[a-zA-Z] matchar alla bokstäver, stora som små.
[a-g] matchar alla små bokstäver mellan a och g.
[0-9] matchar alla siffor mellan 0 och 9.
[3-5] matchar alla siffor mellan 3 och 5.
[exmpl] matchar någon av bokstäverna definierade.

#Avslutningsvis

Det här var lite om grunderna i regex. Kör igång och testa på sidorna:

Använd sedan artikeln att luta dig mot i uppgifterna.

#Revision history

  • 2021-04-12: (A, lew) Första versionen.

Document source.

Read more »

Category: regex, unix, linux.

Kokbok för databasmodellering

eller Entity-relationship-modellering (ER-modellering)

Detta dokument handlar om modellering av databaser. Vi delar in modelleringen i tre olika faser med olika syften att fylla. Vi skapar sedan en enkel process i 10-steg som steg för steg hjälper oss att modellera små som stora databaser.

Read more »

Category: artikel.

Exceptions i Python

Det finns två vanliga fel, eller errors, som man kan snubbla över i Python. Det är syntax errors och exceptions. Vi ska titta närmare på exceptions och hur vi kan jobba med dem.

Read more »

Category: oopython.

Att skriva enhetstester

Enhetstester, eller unittester, används för att testa att enskilda metoder eller funktioner gör vad vi förväntar oss. Till exempel om en metod ska returnera bool-värdet True, så ska den aldrig kunna returnera False.

Vi ska titta lite närmare på de olika delarna av pythons inbyggda testramverk unittest. Vi hoppar inte i den djupa delen av bassängen, utan vi håller oss vid det grundläggande delarna. Vill du läsa mer kan du kika på docs.python.org.

Read more »

Category: oopython.

JavaScript och Node.js med async och await

Vi tittar på hur den asynkrona programmeringsmodellen fungerar i JavaScript tillsammans med Node.js.

Vi läser in innehållet från en fil och kombinerar det med utskrifter och försöker förstå hur synkron programmeringsmodell förhåller sig till den asynkrona.

Vi använder async/await för att hantera den asynkrona programmeringsmodellen och styra upp exekveringsordningen. Men för att förstå vad som händer så tar vi vägen förbi callback och promise.

Read more »

Category: nodejs, javascript, kursen databas.

JavaScript och Node.js

Vi skall ta de första stegen för att bygga ett program med JavaScript som vi kan köra med Node.js. Vi börjar med den interaktiva interpretatorn för att sedan lägga koden i en fil och exekvera med programmet node.

Vi ser även hur vi kan lägga funktioner och klasser i separata moduler som inkluderas till vårt main-program.

Read more »

Category: nodejs, javascript, kursen databas.

MySQL och Node.js (v2)

Vi skall använda JavaScript och Node.js för att koppla oss mot en MySQL databas, med hjälp av externa paket vi installerar med pakethanteraren npm.

Vi använder en befintlig databas och kopplar upp oss med ett par JavaScript-filer och gör en rapport via SELECT och en sökfunktion där vi filterar resultatet.

Vi använder async/await för att hantera det asynkrona beteendet och vi gör en enkel inmatning från tangentbordet.

Read more »

Category: nodejs, javascript, mysql, kursen dbjs, kursen databas.

Installera Python i terminalen

Denna artikel visar hur du kommer igång och installerar python i terminalen.

Read more »

Category: python, labbmiljö.

Flask, POST och GET

Vi ska titta närmare på hur man kan jobba med POST och GET i Flask. Målet är att vi ska med hjälp av ett formulär, en tabell, GET och POST, presentera innehåll i vår Flask-applikation. Vi behöver även blanda in json filer för att spara data mellan requests på studentservern.

Read more »

Category: oopython.

Python pakethantering med PIP

Python har många inbyggda moduler men det finns många fler externa moduler som kan användas. PIP är ett verktyg för att installera sådana externa moduler. Det är en pakethanterare för Pythons externa moduler.

Denna artikel beskriver kortfattat hur du jobbar med PIP och hur du installerar pip3 för Python 3.

Read more »

Category: labbmiljo.