Till Startsidan
JavaScript.nu / Perl-kurs / Sök och ersätt i strängar

LÄR DIG ATT PROGRAMMERA PERL
Sök och ersätt i strängar

Det vi nu ska lära oss är modifiering av strängar, dvs att ändra innehållet i en sträng. I vårt satt ska vi göra detta med "sök och ersätt"-metoden. Vi kommer att ange vad vi vill ersätta och med vad detta ska ersättas så sköter Perl resten.
Detta har flera likheter med hur man söker genom strängar, så du kommer att få använda dina kunskaper från föregående kapitel när du börjar med detta kapitel.
#!/usr/bin/perl
print "Content-type:text/html\n\n";

$saga="Mors lilla olle i skogen gick.";
$antalL=($saga =~ s/l/L/g);

print "I vår saga fanns $antalL l.\n";
print "Sagan är nu:\n";
print "$saga";


Utmatning:
I vår saga fanns 5 l.
Sagan är nu:
Mors LiLLa oLLe i skogen gick.
Som du ser är returvärdet till skillnad från sökningarna vi tidigare gjort inte sant (1) eller falskt (''), nu är det istället antalet utbytningar som gjorts.
Även nu kan vi använda oss av de "specialtecken" vi tidigare lärt oss, så som punkt (.), plus (+), asterix (*) etc.

Nedan visar jag några exempel så du ska kunna se hur detta fungerar. Jag har gett exempel på hur strängen $str ändras om man har olika värden på det man söker efter och det som man ersätter detta med. Jag har även skrivit ner hur många ersättningar det totalt blir.

Tänk också på att när jag skrivit ett \X (X = ett tecken) nedan så symboliserar det inte ett backslash följt av tecknet jag angett, utan det symboliserar det tecken som detta motsvarar. Exempel:
\n motsvarar ett radbyte.
\@ motsvarar ett snabel-a.
Det som tas bort/byts ut är markerat i tabellen för din underlättnad att förstå vad som har hänt.

För att du ska se vad som är vad i tabellen nedan kan du jämföra kolumnernas rubriker med raden neda.
$nr=($str =~ s/sökEfter/ersättMed/g);

sökEfter
ersättMed
$str (före)
$str (efter)
$nr
&
\n
name=ida&psw=glad&sesson=0032
name=ida\npsw=glad\nsesson=0032
2
<
&lt;
<I>Kursiv</I>
&lt;I>Kursiv&lt;I>
2
\D
(inget)
ID:67912;
67912
4
[aeiou]
(inget)
JavaScript.nu
JvScrpt.n
4
<.*>
(inget)
Inga<B>taggar</B>här
Ingahär
1
<[^>]*>
(inget)
Inga<B>taggar</B>här
Ingataggarhär
2
<!--.*-->
(inget)
aa<!--b\nb-->cc
aa<!--b\nb-->cc
'' (0)
<!--(.|\n)*-->
(inget)
aa<!--b\nb-->cc
aacc
1
\D+\d?:
\n
user:264;user2:742;password3:643
\n254\n742\n643
3
\w+\@\w+\.\w{2,3}
[CENSUR]
email=julia\@abc.com&name=julia
email=[CENSUR]&name=julia
1
[A-Za-z]+:\/\/[\w-]+\.[^\s<>"']+
URL
<A HREF="ftp://sida.com/katalog/">http://sajt.nu/fil.html</A>
<A HREF="URL">URL</A>
2

Kolla noga på alla exemplen och försök förstå vad som hänt i vart och varje fall. Som du ser används en hel del specialtecken från föregående kapitel. Minns du inte vad de olika tecknena symboliserade, öppna kapitel 11 i ett nytt fönster och kolla där.

Som du ser är detta ett ytterst kraftfullt verktyg i Perl och du kommer med största sannolikhet få stor användning av det, oavsett vad för sorts script du har planerat att skapa.

Innan detta kapitel tar slut ska jag påminna dig om att du precis som när du sökte i förra kapitlet kan välja att du ska göra sökningen utan att skillnad tas till STOR och liten bokstav. Du lägger då bara till ett "i" efter tredje slashet. Dvs, istället för...
$nr=($str =~ s/sökEfter/ersättMed/g);
...så ska du ha denna rad...
$nr=($str =~ s/sökEfter/ersättMed/gi);

Vill du bara ersätta första exemplaret av sökEfter i $str (till skillnad från vad vi hittills gjort, att ersätta alla sökEfter som hittas i $str), ta då bort det "g" som vi nu haft efter tredje slashet. Tas detta bort görs bara en ändring (det första sökEfter ersätts med ersättMed).


Ja, då var denna Perl-kurs avslutad. Om du vill veta när nya delar kommer, registrera dig för JavaScript.nu's nyhetsbrev (skickas ut ca 6 gånger om året). Sist men inte minst vill jag påminna om att övning ger färdighet. Det bästa sättet att lära sig Perl är att tänka ut ett script man vill ha och sedan skapa det. Vartefter som kommer du att lära dig mer och mer om hur du gör effektiva och lätt justerbara script som på bästa sätt löser olika problem, vilket i sig är lika svårt som själva språket Perl.
Lycka till!

[Perl guiden]






Copyright © Omid Rouhani 1997-2022; Alla rättigheter reserverade.
Guider: [ HTML guide ] - [ JavaScript guide ] - [ DHTML guide ] - [ Perl guide ] - [ Sitemap ]