• Reset your password

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log in
Hjem
Linuxin 2025

Breadcrumb

  • Hjem
  • forums
  • Simpel Perl og regulære udtryk

Hvad kan du med 100% sikkerhed sige, at du har stemt?

Resultater

1
0% (0 stemmer)
2
0% (0 stemmer)
Schrödinger
100% (1 stemme)
Antal stemmer: 1
Af kirneh | 15.04.2003 23:13

Simpel Perl og regulære udtryk

Artikel

Navnet Perl er en forkortelse af "Practical Extraction and Report Language" som fortæller noget om hvad Perl er rigtig god til nemlig tekstmanipulation. Med Perl er det let at hente bestemte informationer ud fra f.eks. en tekstfil.



For at komme i gang starter jeg med det klassiske "Hello World!" script / program. Indsæt

de følgende linier i et tekstdokument (eks.pl) og kør det med kommandoen:

$ perl eks1.pl



// --eks1.pl-------------------

#! /usr/bin/perl

print "Hello World!\n";

// ----------------------------



Du kan også gøre filen eksekverbar med denne kommando:

$ chmod +x eks1.pl

hvorefter det køres med

$ ./eks1.pl



I det næste eksempel skal vi først gemme en stump tekst i en variabel, for derefter at

udskrive tekststumpen sammen med noget andet tekst.



// --eks2.pl-------------------

#! /usr/bin/perl

my $tekst = "En tekststreng.";

my $tal = 3.14;

print "Indholdet af \$tekst er: $tekst\n";

print "Indholdet af \$tal er: $tal\n";

// ----------------------------



Når du kører programmet skulle det gerne skrive dette til skærmen.

Indholdet af $var er: En tekststreng.

For at skrive specialtegnet $ har jeg escapet det i print sætningen (\$), det gøres for at

Perl ikke skal indsætte værdien af $var i strengen som den gør lidt senere.



I Perl kan man også sætte betingelser for om en bestemt stump kode skal afvikles, det gøre

vha. af en if sætning, der er opbygget på denne måde:

if(betingelse){gør noget}

hvor betingelse kan være hvadsomhelst, f.eks. 2 > 1 (sandt), 1 > 2 (falsk), 4 == 3 (falsk),

4 != 3 (sandt). I stedet for at have faste værdier i betingelsen benytter man næsten altid

værdier gemt i variabler. Hvis man ønsker at gøre noget hvis betingelsen er opfyldt og

noget andet hvis det ikke er tilfældet benytter man if-else strukturen, der er vist i

eksempel 3.



// --eks3.pl-------------------

#! /usr/bin/perl

my $number = 4;



if($number < 4)

{

print "Betingelse opfyldt!\n";

}

else

{

print "Betingelse ikke opfyldt!\n";

}

// ----------------------------



Det der gør Perl virkelig stærkt er de regulære udtryk. Med regulære udtryk er man i stand

til afgøre om en streng opfylder bestemte betingelser (findes der tal i udtrykket ...) og

evt. at opdele en tekststreng efter dens egenskaber.



// --eks4.pl-------------------

#! /usr/bin/perl

my $streng = "123";



if($streng =~ /^[0-9]+$/)

{

print "Der er kun tal i \$streng: $streng\n";

}



if($streng =~ /^[a-zæøåA-ZÆØÅ]+$/)

{

print "Der er kun bogstaver i \$streng: $streng\n";

}

// ----------------------------



I eksemplet er betingelserne i if sætningerne regulære udtryk. Betingelsen

$streng =~ /^[0-9]+$/

er opfyldt hvis indholdet af $streng opfylder det efterfølgende udtryk (forklaret herefter)



/ # regexp starter

^ # matcher linie begynd

[0-9] # matcher et tegn i intervallet fra 0 til 9

+ # gør at matchen fra forrige linie gentages et vilkårligt antal gange

$ # matcher linie slut

/ # regexp slut



Er det svært at gennemskue hvordan det regulære udtryk er konstrueret kan programmet

txt2regex (http://txt2regex.sourceforge.net/) anbefales. Den stiller en række spørgsmål og ud fra dine

svar opbygger programmet så et regulært udtryk der matcher det ønskede.



// --eks5.pl-------------------

#! /usr/bin/perl

my $var = "En tekststreng der 42 indeholder et tal.";



if($var =~ /^([^0-9]*)([0-9]+)(.*)/)

{

print "Strengen inden tallet: $1\n";

print "Tallet: $2\n";

print "Strengen efter tallet: $3\n";

}

else

{

print "Strengen indeholder ikke et tal: $var\n";

}

// ----------------------------



Jeg tror eksemplet kræver en god forklaring. Kernen i eksemplet er betingelsen:

$var =~ /regexp/

der afprøver det regulære udtryk regexp på indholdet af $var. Hvis det regulære udtryk er

opfyldt har udtrykket værdien sand og if-betingelsen er opfyldt.



Opbygningen af det regulære udtryk i eksemplet er her beskrevet.

/ # regexp starter

^ # matcher begyndelsen af en linie

([^0-9]*) # matcher et vilkårligt antal tegn der ikke er tal, det der matches gemmes i variablen $1

([0-9]+) # matcher en gruppe af tal, dog med mindst et taltegn --> $2

(.*) # matcher resten af strengen --> $3

/ # regexp slut



Jeg håber det er nok til at komme i gang med lidt Perl scipting. Hvis det har fanget

din interesse er der herunder flere kilder til information om Perl og lidt om regulære

udtryk.



# Man-sider omhandlende Perl og regulære udtryk i Perl (engelsk)

man perl

man perlintro

man perlrequick

man perlretut

man perlre



# Regulære udtryk (regex) og globbing - kapitel i "Friheden til at vælge ..." bøgerne (dansk)

http://www.linuxbog.dk/alle/bog/regexp.html


  • Log in to post comments

Kommentarer

Svar søges

2 stk Jolla C2 sælges 0
Den er go 0
Vil du have et sikrere og mere privat internet? Du skal blot installere Vivaldi-browseren med Proton VPN understøttelse! 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

Det første forumindlæg efter installation af Forum-modulet 7
Test 1
Vanilla OS 12
Nye forum-indlæg viser sig kun 1 gang 1
Vil alle forumindlæg vise sig to gange 1
Hjælp til remote terminal vindue? 3
PCLinuxOS 19
Kan ikke boote på installation 24
80-20 reglen 1
Skærmlys fader ud på min bærbare 8
32 bit distro på max 700mb der stadig understøttes 26
Har vi nogen Linux konsulenter i Slagelse området? 3
Virkelig 7
gnome-software? 3
Archer T2U AC600 Wireless Dual Band USB Adapter 26
En farverig APT 3.0 udgivelse imponerer med sine nye funktioner 2
Unix's fødsel 2
Linux Mint 13
"Intet realistisk alternativ" - mig i r*ven 1
German state moving 30,000 PCs to LibreOffice 6

Copyright © 2025 Company Name - All rights reserved

Developed & Designed by Alaa Haddad