# Håndbog for editoren for regulære udtryk

Jesper K. Pedersen

    blackie@kde.org

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

Denne håndbog beskriver den 'regulære udtryk'-editorkontrol

KDE regulært udtryk

## Indledning

Den regulær udtryk editor er en editor til redigering af regulære udtryk på en grafisk måde (i modsætning til ascii-syntaks). Traditionelle regulære udtryk er blevet skrevet i ascii-syntaks, som for eksempel ser sådan her ud `^.*kde\b`. Den største bagdel ved dette er:

- Det er svær at forstå for folk der ikke er programmører.

- Det kræver at du escaper visse symboler (for for eksempel at matche en stjerne, skal du skrive `\*`).

- Det kræver at du husker regler for præcedens (Hvad matcher `x|y*`? et enkelt `x` eller et antal `y`, OR et antal `x`'er og `y`'er blandede?)

Editoren for regulære udtryk, på den anden side, lader dig tegne dine regulære udtryk på en entydig måde. Editoren løser i det mindste punkt to og tre ovenfor. Den gør måske ikke regulære udtryk tilgængelige for dem der ikke er programmører, skønt det er noget tiden vil vise. Så hvis du ikke er programmør, men er blevet i stand til at bruge styrken i regulære udtryk ved hjælp af denne editor, så vil jeg rigtig gerne vide det.

## Hvad er et regulært udtryk

Et regulært udtryk er en måde at angive betingelser der skal være opfyldt for en situation man tænker på. Normalt når du søger i en teksteditor angiver du teksten der skal søges efter bogstaveligt. Ved brug af regulære udtryk, på den anden side, fortæller du hvordan en given match skal se ud. Eksempler på dette inkluderer Jeg leder efter ordet KDE, men kun i begyndelsen af linjen, eller Jeg leder efter ordet `den`, men det skal stå for sig selv, eller Jeg leder efter filer der begynder med ordet `test`, fulgt af et antal cifre, for eksempel `test12`, `test107` og `test007`

Du bygger regulære udtryk fra stumper af regulære udtryk, ligesom du bygger store Lego-legetøjsting fra mindre dele. Ligesom i Lego-verdenen, er der et antal basale byggeblokke. I det følgende vil jeg beskrive hver af disse basale byggeblokke ved brug af et antal eksempler.

Søgning efter normal tekst.

Hvis du kun ønsker at søge efter en given tekst, er et regulært udtryk bestemt ikke et godt valg. Grunden er at regulære udtryk tilknytter en speciel betydning til visse tegn. Dette inkluderer følgende tegn: `.*|$`. Hvis du altså ønsker at søge efter teksten `kde.` (dvs tegnene `kde` fulgt af et punktum), så vil du skulle angive dette som `kde\.`

Editoren for regulære udtryk løser dette problem ved at tage sig escape-reglerne for dig.

At skrive `\.` snarere end blot `.` kaldes at escape.

Matchende URL'er

Når du vælger noget der ser ud som en URL i KDE, så vil programmet `klipper` tilbyde at starte `konqueror` med en valgte URL.

`Klipper` gør dette ved at matche markeringen mod adskillige forskellige regulære udtryk, når et af de regulære udtryk matcher, bil hjælpekommandoen blive tilbudt.

Det regulære udtryk for URL'er siger (blandt andet), at markeringen skal begynde med teksten `http://`. Dette beskrives ved brug af regulære udtryk med at sætte en hat (`^`-tegnet). foran `http://`).

Ovestående er et eksempel på matchende positioner ved brug af regulære udtryk. Tilsvarende kan positionen linjeslut matches ved brug af tegnet `$` (dvs. et dollar-tegn).

Søgning efter ordet `den`, men ikke den `ne`, `hån` den eller `man` den `s`

To ekstra positionstyper kan matches på ovenstående måde, nemlig positionen ved en ordgrænse, og positionen ved en ikke-ordgrænse. Disse positioner angives ved hjælp af teksten `\b` (for ordgrænse) og `\B` (for ikke-ordgrænse)

Derfor består søgning efter ordet `den` i at bruge det regulære udtryk `\bden\b`. Dette angiver at vi søger efter `den` uden bogstaver på nogen af siderne (dvs. med en ordgrænse på hver side)

De fire positioner der matcher et regulært udtryk indsættes i editoren for regulære udtryk ved brug af fire forskellige positioner værktøjet

Søgning efter enten `den` eller `det`

Forestil dig at du ønsker at gennemgå dit dokument søgende efter enten ordet `den` eller ordet `det`. Med en sædvanlig søgemetode kunne du gøre dette i to omgange, i første omgang ville du søge efter `den`, og i anden omgang ville du søge efter `det`.

Ved brug af regulært udtryk søgning vil du kunne søge efter begge i én omgang. Du gør dette ved at søge efter `det|den`. det vil sige ved at adskille de to ord med en lodret linje.

Bemærk at på hver side af den lodrette linje er der et regulært udtryk, så denne egenskab bruges ikke blot til at søge efter to forskellige stumper tekst,men til at søge efter to forskellige regulære udtryk.

I editoren for regulære udtryk skriver du ikke selv den lodrette linje, men du vælger i stedet alternativt værktøj, og indsætter de to regulære udtryk ovenover hinanden.

Matche nogetsomhelst

Regulære udtryk sammenlignes ofte med jokertegn-matchning i skallen - det vil sige muligheden for at angive et antal filer ved brug af stjernen. Du genkender formodentlig jokertegn-matchning fra følgende eksempler:

- `rm *~` - her er `*~` skallens jokertegn der matcher hver fil der ender med `~`

- cat test??.res - matcher hver fil der begynder med `test` fulgt af to vilkårlige tegn, og endelig efterfulgt af `.res`

I skallen matcher stjernen et vilkårligt tegn et vilkårligt antal gange. Stjerne matcher med andre ord hvadsomhelst. Dette skrives som `.*` i syntaksen for regulære udtryk. Prikken matcher et vilkårligt enkelt tegn, dvs blot ét tegn, og stjernen siger at det regulære udtryk før dette skal matches et vilkårligt antal gange. Tilsammen siger dette et enkelt tegn et vilkårligt antal gange.

Dette synes måske vældig kompliceret, men når du ser det større billede vil du også kunne se styrken. Lad mig vise dig et andet basalt regulært udtryk: `a`. Bogstavet `a` for sig selv er et regulært udtryk der matcher et enkelt bogstav, nemlig bogstavet `a`. Hvis vi kombinerer det med stjernen, altså `a*`, så har vi et regulært udtryk der matcher et vilkårligt antal a'er.

Vi kan kombinere flere regulære udtryk efter hinanden, for eksempel siger `lod(de)*`.

`(de)*` siger at det, der er indenfor parenteserne, gentages et vilkårligt antal gange.

Forestil dig at du havde skrevet dette regulære udtryk i søgefeltet i en teksteditor, så ville du have fundet følgende ord (blandt andre): `lod`, `lodde`, `loddede`, `loddededededede`

Når du har forstået dette er det forhåbentlig ikke svært for dig at skrive skal-joker-søgningen `test??.res` som et regulært udtryk. Svar: `test..\.res`. Prikken for sig selv er et vilkårligt tegn. For at matche en enkel prik må du skrive `\.`

Dette kaldes at escape

. Det regulære udtryk `\.` matcher med andre ord et punktum, mens et punktum for sig selv matcher et vilkårligt tegn.

I editoren for regulære udtryk, laves gentagne regulære udtryk ved brug af gentagelsesværktøjet

Erstatning af `&` med `&amb;` i et HTML-dokument

I HTML skal det specielle tegn `&` skrives som `&amp;` - dette er ligesom at escape i et regulært udtryk.

Forestil dig at du har skrevet et HTML-dokument i en normal editor (f.eks. XEmacs eller Kate), og du havde fuldstændig glemt denne regel. Når du bliver klar over denne fejl bliver du så nødt til at erstatte hver forekomst af `&` med `&amp;`.

Dette kan man sagtens gøre med normal 'søg og erstat', der er imidlertid et lille problem. Lad os sige at du huskede denne regel - en gang imellem - og gjorde det rigtigt nogle steder. Ubetinget erstatning vil nu resultere i at `&amp;` bliver erstattet med `&amp;amp;`

Det du virkelig ønsker at gøre er at `&` kun skal erstattes hvis der ikke efterfølges af bogstaverne `amp;`. Du kan gøre dette ved brug af regulære udtryk ved noget der hedder positiv fremadskuen.

Det regulære udtryk, der kun matcher et ét-tegn hvis det ikke efterfølges af bogstaverne `amp;` ser sådan her ud: `&(?!amp;)`. Det her er selvfølgelig nemmere at læse ved brug af editoren for regulære udtryk, hvor du ville bruge fremadskuen-værktøjerne.

## Brug af editor for regulære udtryk

Dette kapitel vil fortælle dig om hvordan editoren for regulære udtryk virker.

### Organisation af skærmen

Den vigtigste den af editoren er selvfølgelig redigeringsområdet, som er det område hvor du tegner dit regulære udtryk. Dette område er det store grå område i midten.

Ovenover redigeringsområdet har du to værktøjslinjer, den første indeholder redigeringshandlinger - meget ligesom tegneværktøjer i et tegneprogram. Den anden værktøjslinje indeholder en hvad er dette-knap og knapper til fortryd og 'annullér fortryd'.

Nedenfor redigeringsområdet finder du det regulære udtryk der bygges for øjeblikket i såkaldt ascii-syntaks. Ascii-syntaksen opdateres mens du redigerer det regulære udtryk i den grafiske editor. Hvis du hellere vil opdatere ascii-syntaksen, så gør det bare, den grafiske editor vil blive opdateret langs af sted for at reflektere dine ændringer.

Endelig, til venstre for redigeringsområdet, vil du finde et antal præ-fabrikerede regulære udtryk. De tjener to formål: (1) Når du indlæser editoren med et regulært udtryk så bliver dette regulære udtryk gjort pænere eller bedre forståeligt ved at erstatte almindelige regulære udtryk. I skærmaftrykker ovenfor, kan du se hvordan ascii-syntaksen ".*" er blevet erstattet med en boks der siger "hvadsomhelst". (2) Når du indsætter regulære udtryk vil du måske finde byggeblokke for dine egne regulære udtryk fra sættet af præfabrikerede regulære udtryk. Se afsnittet om brugerdefinerede regulære udtryk for at lære hvordan du gemmer dine egen regulære udtryk.

### Redigeringsværktøjer

I dette afsnit bliver forventes det at du har læst kapitlet om hvad er et regulært udtryk, eller har tidligere kendskab til dette emne.

Alle redigeringsværktøjerne er placeret i værktøjslinjen over redigerings området. Hvert af dem vil blive beskrevet i det følgende.

#### Markeringsværktøj

Markeringsværktøjet bruges til at markere elementer for klip-og-klistr og træk-og-slip. Dette er ligesom markeringsværktøjet i alle andre tegneprogrammer.

#### Tekstværktøj

Ved brug af dette værktøj vil du indsætte normal tekst at matche. Tekst matches bogstaveligt, dvs. du behøver ikke at bekymre dig om at specielle tegn. I eksemplet ovenfor vil følgende regulære udtryk blive bygget: `abc\*\\\)`

#### Tegn-værktøj

Ved brug af dette værktøj kan du indsætte tegn-områder. Eksempler inkluderer det der i ASCII-tekst hedder `[0-9]`, `[^a-zA-Z,_]`. Når et punkt indsættes med dette værktøj vil en dialog komme frem, i hvilken du angiver tegn-områderne.

Se beskrivelsen af Gentagne regulære udtryk.

#### Vilkårligt-tegn værktøj

Dette er det regulære udtryk "punktum" (.). Det matcher et vilkårligt enkelt tegn.

#### Gentagelsesværktøj

Dette er de gentagne elementer. Dette inkluderer der der i ASCII-syntaks bliver repræsenteret ved en stjerne (*), et plus (+), et spørgsmålstegn (?), og områder ({3,5}). Når du indsætter et punkt ved brug af dette værktøj, vil en dialog komme frem der spørger om antallet af gange der skal gentages.

Du angiver hvad der skal gentages ved at tegne det gentagne indhold indeni bokse som dette værktøj indsætter.

Gentagne elementer kan både bygges udefra og ind, og indefra og ud. Det vil sige du kan først tegne det der skal gentages, vælge det og bruge gentagelsesværktøjet til at gentage det. Alternativt kan du først indsætte gentagelseselementet, og tegne det der skal gentages indeni det.

Se beskrivelse i gentaget regulært udtryk.

#### Alternativt værktøj

Dette er det alternative regulære udtryk (|). Du angiver alternativerne ved at tegne hvert alternativ oven på det andet indeni boksen som dette værktøj indsætter.

Se beskrivelsen i alternative regulære udtryk

#### Sammensætningsværktøj

Sammensætningsværktøjet repræsenter ikke noget bestemt regulært udtryk. Det bruges til at gruppere andre underdele sammen i en boks, som nemt kan kollapses til kun at være sin titel. Dette kan ses i højre del af skærmaftrykket ovenfor.

#### Linje-start/slut værktøjer

Værktøjer for linjestart og linjeslut matcher henholdsvis starten af linjen og slutningen af linjen. Det regulære udtryk i skærmaftrykket ovenfor matcher således linjer der kun matcher mellemrum.

Se beskrivelsen position regulære udtryk.

#### Ord (ikke)-grænse værktøjer

Ordgrænseværktøjer matcher en ordgrænse henholdsvis en ikke-ord grænse. Det regulære udtryk i skærmaftrykket matcher således ethvert ord der starter med `the`. Ord `the` selv bliver imidlertid ikke matchet.

Se beskrivelsen i grænse regulære udtryk.

#### Positive/Negative se-fremad værktøjer

Se-fremad værktøjerne angiver enten et positivt eller negativt regulært udtryk der skal matches. Når det er ovre er det imidlertid ikke en del af det fundne i alt.

Bemærk: Du har kun lov til at placere se-frem ved slutningen af det regulære udtryk. Editorens kontrol for regulære udtryk påtvinger ikke dette.

Se beskrivelsen i se-fremad regulære udtryk.

### Brugerdefinerede regulære udtryk

I venstre side af redigeringsområdet er den en listeboks placeret der indeholder brugerdefinerede regulære udtryk. Nogle regulære udtryk er præinstallerede med din KDE-installation, men du kan også selv gemme andre.

Disse regulære udtryk tjener to formål ( se detaljeret beskrivelse), nemlig (1) at tilbyde dig et sæt byggeblokke og (2) at få almindelige regulære udtryk til at se pænere ud.

Du kan gemme dine egne regulære udtryk ved at højreklikke med museknappen i redigeringsområdet, og vælge `Gem regulært udtryk`.

Hvis det regulære udtryk du gemmer er indenfor en sammensat beholder så vil det regulære udtryk være med til at få senere regulære udtryk til at se pænere ud.

Brugerdefinerede regulære udtryk kan slettes eller omdøbes ved at trykke med højre museknap foroven i det regulære udtryk det drejer sig om i listeboksen.

## Rapportering af fejl og forslag til nye egenskaber

Fejlrapporter og ønsker om egenskaber rapporteres gennem KDE Bug Tracking System. Før du rapportere om en fejl eller foreslår en egenskab, så tjek venligst at det ikke allerede er blevet rapporteret/foreslået

## Ofte stillede spørgsmål

### Understøtter editoren for regulære udtryk tilbagereferencer?

Nej for øjeblikke er dette ikke understøttet. Det er planlagt til næste udgave.

### Understøtter editoren for regulære udtryk at vise matcher?

Nej, forhåbentlig vil det være der i næste udgave.

### Jeg er forfatter til et KDE-program, hvordan kan jeg bruge denne kontrol i mit program?

Se Dokumentationen for klassen KRegExpEditorInterface

### Hvorfor kan jeg ikke finde Redigér regulært udtryk-knappen i for eksempel konqueror på en anden KDE3-installation?

Kontrollen for regulære udtryk er i pakken KDE-utils. Hvis du ikke har denne pakke installeret, så vil redigér regulære udtryk-knapperne ikke være der i programmerne.

## Medvirkende og licens

Dokumentation ophavsret 2001, Jesper K. Pedersen blackie@kde.org, men den danske oversættelse er lavet af Erik Kjær Pedersen selvom Jesper er dansk.

&underGPL; &underFDL;