/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
matching, substition, split spørgsmål:
Fra : Thomas Schulz


Dato : 15-02-01 13:13

Spørgsmålene er vedr. http://www.webcafe.dk/perl/artikler/013/pa013.php3 :
Der er 4 ting/eksempler, jeg ikke helt har kunnet forstå (generelt forstår
jeg godt emnet):
Mit spørgsmål til hvert "eksempel" er i kommentaren (hvis ikke wordwrap
ødelægger det :) nedenunder det givne "eksempel".


# Eksempel (1 styk) på matching
$navn = 'Jeg har 100 Kr.';
if ($navn =~ /\d+ kr\./i) {
print "Der var nævnt et beløb";
}
else {
print "Der var ikke nævnt et beløb";
}
# Hvad gør det *i* i test-sætningen? Det lader til ingen indflydelse at have
(har nemlig testet det)?


# Eksempel (2 styk) på substition
s/hej/davs/g
# *s* betyder det er en substition.. men hvad gør *g* ?
$toStyk =~ s/(\w+) og \1/To gange $1/; # toStyk er nu: 'To gange Hansen'
# Hvad gør *\1* - det lader til at have en stor virkning hvis man prøver at
fjerne det? Men jeg kan ikke finde noget info omkring det?


# Eksempel (1 styk) på split
$URL = 'WebCafe.dk/perl/index.php3';
($site, $bib, $fil) = split (/\/+/, $URL);
# ok *\/* gør at */* bliver det den skal "splitte" efter .. men hvad gør *+*
her? en separator? Eller en der siger der er 1 eller flere */* der skal
splittets?


Mvh.
Thomas Schulz



 
 
Adam Sjøgren (15-02-2001)
Kommentar
Fra : Adam Sjøgren


Dato : 15-02-01 14:30

On Thu, 15 Feb 2001 13:13:06 +0100, Thomas Schulz wrote:

> /\d+ kr\./i

> Hvad gør det *i*

perldoc perlop:

i Do case-insensitive pattern matching.

> s/hej/davs/g

> hvad gør *g* ?

perldoc perlop:

g Replace globally, i.e., all occurrences.

> s/(\w+) og \1/To gange $1/;

> Hvad gør *\1*

"Peger" på det den første parantes matchede.

> split (/\/+/, $URL);

> men hvad gør *+* her?

perldoc perlre:

+ Match 1 or more times


Read The Fine Manual. Eller en bog.


Mvh.

--
"I told the teacher I had to go to the bathroom. Adam Sjøgren
Quick, what's 11+7?" asjo@koldfront.dk

Thomas Schulz (16-02-2001)
Kommentar
Fra : Thomas Schulz


Dato : 16-02-01 11:46

> Read The Fine Manual. Eller en bog.
Det hedder da ikke fine?

> perldoc perlre:
Mmm... Jeg går ud fra den følger med ActivePerl distro, jeg vil lede efter
den.

>..
Mange tak for besvarelserne :)

Thomas



Adam Sjøgren (16-02-2001)
Kommentar
Fra : Adam Sjøgren


Dato : 16-02-01 12:05

On Fri, 16 Feb 2001 11:45:46 +0100, Thomas Schulz wrote:

>> Read The Fine Manual. Eller en bog.

> Det hedder da ikke fine?

I dette tilfælde (og når man ellers ønsker at tale ekstremt pænt -
måske for at understrege en pointe), jo.


Mvh.

--
"It's psychosomatic. You need a lobotomy. Adam Sjøgren
I'll get a saw." asjo@koldfront.dk

Thomas Schulz (16-02-2001)
Kommentar
Fra : Thomas Schulz


Dato : 16-02-01 16:27

> > Det hedder da ikke fine?
>
> I dette tilfælde (og når man ellers ønsker at tale ekstremt pænt -
> måske for at understrege en pointe), jo.

:)

Thomas



Nikolaj Kolbe (15-02-2001)
Kommentar
Fra : Nikolaj Kolbe


Dato : 15-02-01 18:59

Hep

Lige for at forsvare den konkrete artikel på Webcafe.

> Spørgsmålene er vedr. http://www.webcafe.dk/perl/artikler/013/pa013.php3 :
> Der er 4 ting/eksempler, jeg ikke helt har kunnet forstå (generelt forstår
> jeg godt emnet):
> Mit spørgsmål til hvert "eksempel" er i kommentaren (hvis ikke wordwrap
> ødelægger det :) nedenunder det givne "eksempel".
>
>
> # Eksempel (1 styk) på matching
> $navn = 'Jeg har 100 Kr.';
> if ($navn =~ /\d+ kr\./i) {
> print "Der var nævnt et beløb";
> }
> else {
> print "Der var ikke nævnt et beløb";
> }
> # Hvad gør det *i* i test-sætningen? Det lader til ingen indflydelse at have
> (har nemlig testet det)?

Forklares i artiklen med sætningen "Den oftest brugte er 'i', som
fortæller at matchingen ikke skal tage sig af forskel på store og små
bogstaver."

> # Eksempel (2 styk) på substition
> s/hej/davs/g
> # *s* betyder det er en substition.. men hvad gør *g* ?
> $toStyk =~ s/(\w+) og \1/To gange $1/; # toStyk er nu: 'To gange Hansen'
> # Hvad gør *\1* - det lader til at have en stor virkning hvis man prøver at
> fjerne det? Men jeg kan ikke finde noget info omkring det?

Forklares i artiklen med: "Hvis du f.eks har to sæt parenteser gemmes
variablene \1 og \2, som kan bruges i udtrykket og variablene $1 og
$2. Disse kan benyttes til at arbejde videre på de matchede dele, som
følgende eksempel viser."


> # Eksempel (1 styk) på split
> $URL = 'WebCafe.dk/perl/index.php3';
> ($site, $bib, $fil) = split (/\/+/, $URL);
> # ok *\/* gør at */* bliver det den skal "splitte" efter .. men hvad gør *+*
> her? en separator? Eller en der siger der er 1 eller flere */* der skal
> splittets?

Forklares i "foregående
artikel" på: http://webcafe.dk/perl/artikler/012/pa012.php3

Ok, måske lidt nøjeregnende, men jeg syntes nu ikke at artiklen efterlader
så mange spørgsmål, som Thomas beskrev

Nikolaj
--
http://webcafe.dk - Dansk site om udvikling til WWW
Lær at mestre PHP, HTML, Java, Perl, SSI og gode Webdesign-dyder


Lars Balker Rasmusse~ (15-02-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 15-02-01 19:04

Nikolaj Kolbe <kolbe@cs.auc.dk> writes:
> > # Eksempel (2 styk) på substition
> > s/hej/davs/g
> > # *s* betyder det er en substition.. men hvad gør *g* ?
> > $toStyk =~ s/(\w+) og \1/To gange $1/; # toStyk er nu: 'To gange Hansen'
> > # Hvad gør *\1* - det lader til at have en stor virkning hvis man prøver at
> > fjerne det? Men jeg kan ikke finde noget info omkring det?
>
> Forklares i artiklen med: "Hvis du f.eks har to sæt parenteser gemmes
> variablene \1 og \2, som kan bruges i udtrykket og variablene $1 og
> $2. Disse kan benyttes til at arbejde videre på de matchede dele, som
> følgende eksempel viser."

Puha, så hellere ignorere \-featuren i en så overfladisk gennemgang.

Jeg mener selv jeg skriver en del forholdsvist utrivielt perl, og jeg
bruger stort set aldrig \1 mm. i regulære udtryk.

Er der overhovedet nogen der kan give et godt eksempel på brug?
($toStyk er lidt for konstrueret).
--
Lars Balker Rasmussen "Special is bad."

Thorbjørn Ravn Ander~ (16-02-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 16-02-01 13:33

Lars Balker Rasmussen wrote:

>
> Er der overhovedet nogen der kan give et godt eksempel på brug?
> ($toStyk er lidt for konstrueret).

Abigails primtalsgenerator.

Men den er ikke for begyndere.

--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear

Lars Balker Rasmusse~ (16-02-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 16-02-01 20:56

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:
> Lars Balker Rasmussen wrote:
> > Er der overhovedet nogen der kan give et godt eksempel på brug?
> > ($toStyk er lidt for konstrueret).
>
> Abigails primtalsgenerator.

Jeg sagde godt. Den eneste grund til at man ville gøre som Abigail er
for at blære sig, og/eller spare program-linier. Det er jo ikke fordi
det just er den hurtigste måde at lave primtal på.

> Men den er ikke for begyndere.

Nej. Hvorfor den nærmest kun underbygger mit argument.
--
Lars Balker Rasmussen "Special is bad."

Thorbjørn Ravn Ander~ (17-02-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 17-02-01 18:07

Lars Balker Rasmussen wrote:

> > > Er der overhovedet nogen der kan give et godt eksempel på brug?
> > > ($toStyk er lidt for konstrueret).
> >
> > Abigails primtalsgenerator.
>
> Jeg sagde godt. Den eneste grund til at man ville gøre som Abigail er
> for at blære sig, og/eller spare program-linier. Det er jo ikke fordi
> det just er den hurtigste måde at lave primtal på.

Du sagde netop "godt", og jeg synes virkelig det er et godt eksempel på
brugen af \1 med venner.

Det eneste andet hvor jeg kan se det kunne være smart er for at matche
<BOO>...</BOO> men det duer jo ikke med BOO inden i BOO.


>
> > Men den er ikke for begyndere.
>
> Nej. Hvorfor den nærmest kun underbygger mit argument.

I begrænsningen viser mesteren sig.

Din oprindelige udtalelse om at gemme \1 til senere, er jeg enig i. Jeg
kan ikke mindes jeg nogensinde har brugt det, og jeg har da efterhånden
prøvet lidt af hvert.


--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear

Peter Makholm (17-02-2001)
Kommentar
Fra : Peter Makholm


Dato : 17-02-01 18:18

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:

> Det eneste andet hvor jeg kan se det kunne være smart er for at matche
> <BOO>...</BOO> men det duer jo ikke med BOO inden i BOO.

Vel, man kunne håndterer tags rekursivt:

sub dotags {
my $ting = shift;
if /(.*?)<([^> ]*)>(.*?)</\2>(.*)/ {
# Transform $2
return dotags "$1$2$3";
} else {
return $ting;
}
}

Men jeg ville nok foretrække noget mere gennemtænkt XSL (er det ikke
sådan cirka det det går ud på?)

--
Peter

Thorbjørn Ravn Ander~ (17-02-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 17-02-01 18:29

Peter Makholm wrote:

> Vel, man kunne håndterer tags rekursivt:
>
> sub dotags {
> my $ting = shift;
> if /(.*?)<([^> ]*)>(.*?)</\2>(.*)/ {
> # Transform $2
> return dotags "$1$2$3";
> } else {
> return $ting;
> }
> }
>
> Men jeg ville nok foretrække noget mere gennemtænkt XSL (er det ikke
> sådan cirka det det går ud på?)

Jo, så'n cirka.

Den generelle konsensus angående Perl og ?ML er at regulære udtryk ikke
er stærke nok til at kunne håndtere dem, og man skal bruge ne parser.

--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear

Thomas Schulz (16-02-2001)
Kommentar
Fra : Thomas Schulz


Dato : 16-02-01 11:51

>Lige for at forsvare den konkrete artikel på Webcafe.
Det var nu ikke som sådan ment som et angreb, jeg vidste godt, at det _nok_
var mig, der havde overset nogt.

>Forklares i artiklen med: "Hvis du f.eks har to sæt parenteser gemmes
>variablene \1 og \2, som kan bruges i udtrykket og variablene $1 og
>$2. Disse kan benyttes til at arbejde videre på de matchede dele, som
>følgende eksempel viser."
Jeg troede bare det skete automatisk, jeg havde ikke knyttet det sammen med
at man selv gav variable navne :)

>Forklares i "foregående
>artikel" på: http://webcafe.dk/perl/artikler/012/pa012.php3
Ahh ja.. Jeg havde husket/læst det som, at den regel kun galt for matching,
men jeg kan se, at det gælder for generelt for regulære udtryk.

>..
Også tak for de andre svar!


mvh.
Thomas Schulz




Søg
Reklame
Statistik
Spørgsmål : 177564
Tips : 31968
Nyheder : 719565
Indlæg : 6408971
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste