# Handbok Editor för reguljära uttryck

Jesper K.
Pedersen

    blackie@kde.org

2001-07-03
0.1
&underFDL;
2001
Jesper K. Pedersen

Den här handboken beskriver den grafiska komponenten för att redigera reguljära uttryck.

KDE
reguljärt uttryck

## Inledning

Editorn för reguljära uttryck är en editor som redigerar reguljära uttryck grafiskt (istället för ASCII-syntax). Traditionellt har reguljära uttryck skrivits in med ASCII-syntax, vilket till exempel ser ut som `^.*kde\b`. De stora nackdelarna med det här sättet är:

- Det är svårt att förstå för andra än programmerare.

- Det kräver att du undantar vissa symboler (för att till exempel matcha en asterisk, måste du skriva `\*`).

- Det kräver att du kommer ihåg regler för prioritet (Vad matchar `x|y*`? Ett ensamt `x` eller ett antal `y`, ELLER ett antal blandade `x` och `y`?)

Editorn för reguljära uttryck, låter dig å andra sidan rita det reguljära uttrycket på ett entydigt sätt. Editorn löser åtminstone punkt två och tre ovan. Den kanske inte gör reguljära uttryck tillgängliga för andra än programmerare, men bara tester av användare kan avgöra det. Så om du inte är en programmerare, och använder den här editorn för att få tillgång till de kraftfulla reguljära uttrycken, tala gärna om det för mig.

## Vad är ett reguljärt uttryck

Reguljära uttryck är ett sätt att ange villkor som ska uppfyllas under vissa förutsättningar. Normalt när du söker i en texteditor, så anger du texten som ska sökas efter bokstavligen. Med reguljära uttryck, så talar du istället om hur en given sökträff ska se ut. Exempel på det här omfattar: Jag letar efter ordet KDE, men bara i början på raden, eller Jag letar efter ordet `den`, men det måste vara ensamt, eller Jag letar efter filer som börjar med ordet `test`, följt av ett antal siffror, till exempel `test12`, `test107` och `test007`.

Man bygger upp reguljära uttryck från deluttryck, precis som man bygger stora konstruktioner med Lego från mindre delar. Som i Lego-världen, finns det ett antal grundläggande byggblock. I det följande kommer jag att beskriva vart och ett av de här grundläggande byggblocken med ett antal exempel.

### Söka efter normal text

Om du bara vill söka efter en given text, så är reguljära uttryck definitivt inte ett bra alternativ. Orsaken till detta är att reguljära uttryck ger särskild mening till vissa tecken. Det här omfattar följande tecken: `.*|$`. Så om du vill söka efter texten `kde.` (dvs. tecknen `kde` följt av en punkt), måste du ange detta som `kde\.` Editorn för reguljära uttryck löser det här problemet genom att ta hand om regler för undantag åt dig. Att skriva `\.` istället för bara `.` kallas att undanta.

### Matcha webbadresser

När du väljer något som ser ut som en webbadress i KDE, så erbjuder sig programmet `klipper` att starta `konqueror` med den markerade webbadressen.

`Klipper` gör det här genom att matcha markeringen med flera olika reguljära uttryck, och om ett av uttrycken matchar, så erbjuds kommandot som hör ihop med uttrycket.

Det reguljära uttrycket för webbadresser säger (bland annat), att texten måste börja med strängen `http://`. Det här beskrivs med ett reguljärt uttryck, genom att inleda strängen `http://` med en hatt (tecknet `^`).

Ovanstående är ett exempel på att matcha positioner med reguljära uttryck. På samma sätt kan positionen radslut matchas med tecknet `$` (dvs. ett dollartecken).

### Att söka efter ordet `den`, men inte den `na`, `an` den eller `stu` den `t`.

Två ytterligare typer av position kan matchas på ovanstående sätt, nämligen en position vid en ordgräns, och en position som inte är vid en ordgräns. Positionerna anges med texten `\b` (för ordgräns) och `\B` (för inte ordgräns).

På så sätt kan en sökning efter ordet `den` göras genom att använda det reguljära uttrycket `\bden\b`. Det här anger att vi söker efter `den` utan några bokstäver på båda sidorna (dvs. med en ordgräns på båda sidorna).

De fyra reguljära uttrycken för att matcha positioner, infogas av editorn för reguljära uttryck med hjälp av fyra olika positionsverktyg.

### Söka efter antingen `hit` eller `dit`

Antag att du vill gå igenom dokumentet och antingen leta efter ordet `hit` eller `dit`. Med en normal sökmetod, skulle du kunna göra det här i två omgångar, första gången skulle du söka efter `hit`, och andra gången efter `dit`.

Med reguljära uttryck skulle du söka efter båda på en gång. Du gör det här genom att söka efter `hit|dit`. dvs. avdelar de två orden med ett vertikalt streck. Observera att varje sida av det vertikala strecket är ett reguljärt uttryck, så den här funktionen är inte bara till för att söka efter två olika strängar, utan för att söka efter två olika reguljära uttryck.

I editorn för reguljära uttryck, skriver du inte in det vertikala strecket själv, utan väljer istället alternativverktyget, och infogar deluttrycken ovanför varandra.

### Matcha vad som helst

Reguljära uttryck jämförs ofta med jokertecken som används för matchning i skalet. Det här är möjligheten att ange flera filer med en asterisk. Du känner säkert igen matchning med jokertecken i följande exempel:

- `rm *~` - här är `*~` skalets jokertecken som matchar allt som slutar med `~`.

- cat test??.res - matchar varje fil som börjar med `test`, och sedan följs av två godtyckliga tecken, och till sist följs av texten `.res`.

I skalet matchar asterisken alla tecken hur många gånger som helst. Med andra ord så matchar asterisken vad som helst. Det här skrivs som `.*` med syntaxen för reguljära uttryck. Punkten matchar vilket enskilt tecken som helst, dvs. bara ett tecken, och asterisken anger att det föregående reguljära uttrycket ska matchas hur många gånger som helst. Tillsammans säger detta vilket enskilt tecken som helst, hur många gånger som helst.

Det här kan verka onödigt komplicerat, men när du ser hela bilden, inser du hur kraftfullt detta är. Låt oss titta på ett annat grundläggande reguljärt uttryck: `a`. Den ensamma bokstaven `a` är ett reguljärt uttryck som matchar en enda bokstav, nämligen bokstaven `a`. Om vi kombinerar det här med asterisken, dvs. `a*`, så har vi ett reguljärt uttryck som matchar hur många a:n som helst.

Vi kan kombinera flera reguljära uttryck efter varandra, till exempel `b(an)*`. `(an)*` anger bara att vad som är inom parentes upprepas hur många gånger som helst. Antag att du skrev in det här reguljära uttrycket i sökfältet på en texteditor. Då skulle du (bland annat) ha hittat följande ord: `ban`, `banan`, `bananan`, `banananananananan`.

Med information ovan, är det förhoppningsvis inte svårt för dig att skriva skalets jokertecken `test??.res` som ett reguljärt uttryck. Svaret är: `test..\.res`. En ensam punkt är vilket tecken som helst. För att matcha en ensam punkt, måste du skriva `\.` Det här kallas att undanta. Med andra ord, så matchar det reguljära uttrycket `\.` en punkt, medan en ensam punkt matchar vilket tecken som helst.

i editorn för reguljära uttryck, så skapas upprepade reguljära uttryck med upprepningsverktyget.

### Byta ut `&` med `&amp;` i HTML-dokument.

I HTML måste specialtecknet `&` skrivas som `&amp;` - det här liknar undantag i reguljära uttryck.

Antag att du har skrivit ett HTML-dokument med en vanlig editor (t.ex. Xemacs eller Kate), och du totalt glömt bort den här regeln. Vad du skulle göra när du insåg misstaget, vore att byta ut varje förekomst av `&` med `&amp;`.

Det här kan lätt göras med en vanlig ersättning, men det finns en hake. Antag att du kom ihåg den här regeln ibland, och gjorde rätt på en del ställen. En ovillkorlig ersättning skulle resultera i att `&amp;` skulle ersättas med `&amp;amp;`.

Vad du verkligen vill säga är att `&` bara ska ersättas om det inte följs av bokstäverna `amp;`. Du kan göra det här med reguljära uttryck genom att använda positiv sökning framåt.

Det reguljära uttrycket, som bara matchar ett och-tecken om det inte följs av tecknen `amp;` ser ut som följer: `&(?!amp;)`. Det här är förstås lättare att läsa genom att använda editorn för reguljära uttryck, där du skulle använda ett verktyg för sökning framåt.

## Att använda Editorn för reguljära uttryck

Det här kapitlet talar om hur editorn för reguljära uttryck fungerar.

### Organisation av skärmen

Den viktigaste delen av editorn är förstås redigeringsområdet, som är området där du ritar upp det reguljära uttrycket. Det här området är den stora gråa rutan i mitten.

Ovanför redigeringsområdet finns två verktygsrader, där den första innehåller redigeringsåtgärder - som liknar ritverktygen i ett ritprogram. Den andra verktygsraden innehåller knappen Vad är det här, och knappar för att ångra och göra om.

Under redigeringsområdet hittar du det reguljära uttrycket som för närvarande är uppbyggt, med den så kallade ASCII-syntaxen. Denna uppdateras medan du redigerar det reguljära uttrycket i den grafiska editorn. Om du hellre vill redigera ASCII-syntaxen, gör gärna det. Den grafiska editorn uppdateras i farten för att visa dina ändringar.

Till sist, längst till vänster i redigeringsområdet hittar du ett antal färdigbyggda reguljära uttryck. De har två syften: (1) När du laddar ett reguljärt uttryck i editorn blir det här uttrycket snyggare, eller mer begripligt genom att ersätta vanliga reguljära uttryck. På skärmbilden ovan, kan du se hur ASCII-syntaxen ".*" har ersatts med en ruta som säger "anything" (vad som helst). (2) När du lägger till reguljära uttryck kan du hitta byggblock för dina egna reguljära uttryck bland de redan uppbyggda uttrycken. Se avsnittet om användardefinierade reguljära uttryck för att lära dig hur man sparar sina egna reguljära uttryck.

### Redigeringsverktyg

Texten i det här avsnittet förutsätter att du har läst kapitlet om vad ett reguljärt uttryck är, eller känner till ämnet sedan tidigare.

Alla redigeringsverktyg finns i verktygsraden ovanför redigeringsområdet. Vart och ett av dem beskrivs i det följande.

#### Markeringsverktyg

Markeringsverktyget används för att markera element för att klippa och klistra, eller dra och släppa. Det här är mycket likt ett markeringsverktyg i vilket ritprogram som helst.

#### Textverktyg

Med det här verktyget lägger du till normal text som ska matcha. Texten matchas bokstavligen, dvs. du behöver inte bry dig om att undanta särskilda tecken. I exemplet ovan, så byggs följande reguljära uttryck: `abc\*\\\)`.

#### Teckenverktyg

Med det här verktyget lägger du till teckenintervall. Exempel är vad som motsvaras av ASCII-texten `[0-9]`, `[^a-zA-Z,_]`. När du lägger till ett element med det här verktyget, visas en dialogruta där du anger teckenintervallen.

Se beskrivningen av upprepade reguljära uttryck.

#### Verktyg för alla tecken

Det här är det reguljära uttrycket "punkt" (.). Det matchar vilket tecken som helst.

#### Upprepningsverktyg

Det här upprepar element. Det omfattar vad som i ASCII-syntax representeras med en asterisk (*), ett plustecken (+), ett frågetecken (?) och intervall ({3,5}). När du lägger till ett element med det här verktyget, så visas en dialogruta som frågar efter antalet gånger att upprepa.

Du anger vad som ska upprepas, genom att rita det inne i rutan som det här verktyget lägger till.

Upprepade element kan både byggas upp utifrån och in, och inifrån och ut. Det vill säga att du först kan rita det som ska upprepas, markera det och använda upprepningsverktyget för att upprepa det. Som ett alternativ kan du först lägga till upprepningselementet, och rita det som ska upprepas inne i det.

Se beskrivningen av upprepade reguljära uttryck.

#### Alternativverktyg

Det här är alternativa reguljära uttryck (|). Du anger alternativ genom att rita varje alternativ ovanpå varandra inne i rutan som det här verktyget lägger till.

Se beskrivningen av alternativa reguljära uttryck.

#### Sammansättningsverktyg

Sammansättningsverktyget representerar inte något reguljärt uttryck. Det används för att gruppera andra delar i en ruta, som lätt kan minskas för att bara visa namnet. Det här kan ses till höger på skärmbilden ovan.

#### Verktyg för radbörjan/radslut

Verktygen för radbörjan och radslut matchar början på raden, och slutet på raden. Det reguljära uttrycket på skärmbilden ovan, matchar alltså hela rader med bara mellanslag.

Se beskrivningen av reguljära uttryck för position.

#### Verktyg för ordgräns eller inte ordgräns

Gränsverktygen matchar en ordgräns eller allt som inte är en ordgräns. Det reguljära uttrycket på skärmbilden matchar alltså alla ord som börjar med `den`. Ordet `den` självt, matchas dock inte.

Se beskrivningen av reguljära uttryck för gränser.

#### Verktyg för positiv/negativ sökning framåt

Verktygen för sökning framåt anger antingen ett positivt eller negativt reguljärt uttryck som ska matchas. Den här matchningen är dock inte en del av hela matchningen.

Observera: Du får bara placera sökningar framåt i slutet på det reguljära uttrycket. Den grafiska komponenten för att redigera reguljära uttryck kontrollerar inte detta.

Se beskrivningen av reguljära uttryck med sökning framåt.

### Användardefinierade reguljära uttryck

Till vänster om redigeringsområdet finns en listruta som innehåller användardefinierade reguljära uttryck. Vissa reguljära uttryck är förinstallerade med din KDE-installation, medan du kan spara andra själv.

De här reguljära uttrycken har två funktioner (se den detaljerade beskrivningen), nämligen (1) erbjuder en mängd byggblock, och (2) gör vanliga reguljära uttryck snyggare.

Du kan spara dina egna reguljära uttryck, genom att högerklicka med musknappen i redigeringsområdet, och välja `Spara reguljärt uttryck`.

Om det reguljära uttrycket du sparar är inom en sammansatt behållare, så kan det reguljära uttrycket användas för att göra efterföljande reguljära uttryck snyggare.

Användardefinierade reguljära uttryck kan tas bort eller döpas om genom att klicka med höger musknapp på motsvarande reguljära uttryck i listrutan.

## Rapportera fel och föreslå funktioner

Felrapporter och önskemål kan rapporteras via KDE:s felspårningssystem. Kontrollera innan du rapporterar ett fel eller föreslår en funktion, att detta inte redan har gjorts.

## Vanliga frågor

### Stöder editorn för reguljära uttryck bakåtreferenser?

Nej, för närvarande stöds inte detta. Det är planerat till nästa version.

### Visar editorn för reguljära uttryck matchningar?

Nej. Förhoppningsvis blir det här tillgängligt i nästa version.

### Jag är upphovsman till ett KDE-program. Hur kan jag använda den här grafiska komponenten i mitt program?

Se Dokumentationen för klassen KRegExpEditorInterface.

### Jag kan inte hitta knappen Redigera reguljärt uttryck i till exempel Konqueror på en annan KDE3 installation, varför?

Den grafiska komponenten för reguljära uttryck finns i paketet KDE-utils. Om du inte har installerat det här paketet, så visas inte knapparna för att redigera reguljära uttryck i program.

## Tack till och licenser

Dokumentation är copyright 2001, Jesper K. Pedersen blackie@kde.org

&underGPL; &underFDL;