/ 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
fatter nul
Fra : F.Larsen


Dato : 20-03-01 22:38

Hvorfor virker det her ikke ?

$strHREFLink =~ s/$strHREFPath//i; # Remove Path from filename

begge strenge indeholder en backslash når det fejler

Uncaught exception from user code:
/(\)/: unmatched () in regexp at D:\InetPub\www.DxAgent.dk\webmaster\scr
ipt\DxNews.pl line 296.



--
Flemming

Q2 3D Benchmarks: http://www.ClanWorld.dk/Q2Bench/
Støjdæmp din PC ..: http://hjem.get2net.dk/Quake2/LowNoise/




 
 
nnnn (21-03-2001)
Kommentar
Fra : nnnn


Dato : 21-03-01 09:28

F.Larsen wrote:

> Hvorfor virker det her ikke ?
>
> $strHREFLink =~ s/$strHREFPath//i; # Remove Path from filename
>
> begge strenge indeholder en backslash når det fejler
>
> Uncaught exception from user code:
> /(\)/: unmatched () in regexp at D:\InetPub\www.DxAgent.dk\webmaster\scr
> ipt\DxNews.pl line 296.
>
Indeholder måske en backslash, hvad med parenteser (som fejlen jo
handler om?


Kig evt også på HTML::Parser, det her ligner en fortsættelse af din
tidligere tråd.


>
>
> --
> Flemming
>
> Q2 3D Benchmarks: http://www.ClanWorld.dk/Q2Bench/
> Støjdæmp din PC ..: http://hjem.get2net.dk/Quake2/LowNoise/
>
>
>


F.Larsen (21-03-2001)
Kommentar
Fra : F.Larsen


Dato : 21-03-01 21:14

Hvorfor fejler en replace når der står backslash i den streng som man benytter i
udtrykket ?


--
Flemming

Q2 3D Benchmarks: http://www.ClanWorld.dk/Q2Bench/
Støjdæmp din PC ..: http://hjem.get2net.dk/Quake2/LowNoise/

"nnnn" <nn@nn.nn> wrote in message news:3AB86609.7090104@nn.nn...
> F.Larsen wrote:
>
> > Hvorfor virker det her ikke ?
> >
> > $strHREFLink =~ s/$strHREFPath//i; # Remove Path from filename
> >
> > begge strenge indeholder en backslash når det fejler
> >




Lars Balker Rasmusse~ (21-03-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 21-03-01 22:54

Flemming, check lige www.usenet.dk... Tak.

"F.Larsen" <N0Spam@usa.net> writes:
> > > Hvorfor virker det her ikke ?
> > >
> > > $strHREFLink =~ s/$strHREFPath//i; # Remove Path from filename
> > >
> > > begge strenge indeholder en backslash når det fejler
>
> Hvorfor fejler en replace når der står backslash i den streng som
> man benytter i udtrykket ?

Tjah, hvis man prøver nogle simple eksemper:

% perl -e '$t = "\\"; /$t/'
/\/: trailing \ in regexp at -e line 1.

% perl -e '$t = "(\\)"; /$t/'
/(\)/: unmatched () in regexp at -e line 1.

Så skyldes det næppe primært backslashen.

Men hvorfor har du lyst til at lave variable regex? Det kan give
problemer for dit program, hvis det variable er ALT for variabelt, da
perl dynamisk skal kompilere dit regex. (Det er det der går galt i
ovenstående eksempler, da de er syntaktisk korrekte).

Men perl kan hjælpe:

"perldoc perlre" siger:

Because patterns are processed as double quoted strings, the
following also work:
[...]
\E end case modification (think vi)
\Q quote (disable) pattern metacharacters till \E

Prøv med følgende:

$strHREFLink =~ s/\Q$strHREFPath//i; # Remove Path from filename
--
Lars Balker Rasmussen "Woo hoo!?"

F.Larsen (24-03-2001)
Kommentar
Fra : F.Larsen


Dato : 24-03-01 10:53

----- Original Message -----
From: "Lars Balker Rasmussen" <lars@balker.org>
>
> % perl -e '$t = "\\"; /$t/'
> /\/: trailing \ in regexp at -e line 1.
>
> % perl -e '$t = "(\\)"; /$t/'
> /(\)/: unmatched () in regexp at -e line 1.
>
> Så skyldes det næppe primært backslashen.

men linien fortolkes altså ;=)

> Men hvorfor har du lyst til at lave variable regex? Det kan give
> problemer for dit program, hvis det variable er ALT for variabelt, da
> perl dynamisk skal kompilere dit regex. (Det er det der går galt i
> ovenstående eksempler, da de er syntaktisk korrekte).

Det har jeg heller ikke. Jeg løber en fil/webside igennem linie for line for
forskellige keywords/link og gemmer den i en database. Undervejs skal strengene
lige justeres lidt - f.eks. med en simpel replace. Fejlen opstod så når der i
websiden stod en backslash eller andre perl specifikke tegn ;=).

> Men perl kan hjælpe:
>
> "perldoc perlre" siger:
>
> Because patterns are processed as double quoted strings, the
> following also work:

Hvad betyder "double quoted strings" egentlig ""?""

> [...]
> \E end case modification (think vi)
> \Q quote (disable) pattern metacharacters till \E

nu bruger jeg ikke vi ;=) så den røg ikke ind på lystaven da jeg læste det ;=)

>
> Prøv med følgende:
>
> $strHREFLink =~ s/\Q$strHREFPath//i; # Remove Path from filename
> --

Lige hvad jeg havde brug for. takker.

--
Flemming

Q2 3D Benchmarks: http://www.ClanWorld.dk/Q2Bench/
Støjdæmp din PC ..: http://hjem.get2net.dk/Quake2/LowNoise/





Lars Balker Rasmusse~ (24-03-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 24-03-01 15:17

"F.Larsen" <N0Spam@usa.net> writes:
> Hvad betyder "double quoted strings" egentlig ""?""

Blot "streng" versus 'streng'.

En quoted streng pakkes ind i to '. Double quoted, fordi " er en dobbel '.

Forskellen er vigtig i perl, da "$foo" er en streng der indeholder det
der var i variablen $foo, og '$foo' er strengen $foo.
--
Lars Balker Rasmussen "Woo hoo!?"

Tariq (24-03-2001)
Kommentar
Fra : Tariq


Dato : 24-03-01 10:48

> Hvorfor virker det her ikke ?
>
> $strHREFLink =~ s/$strHREFPath//i; # Remove Path from filename
>
> begge strenge indeholder en backslash når det fejler
>
> Uncaught exception from user code:
> /(\)/: unmatched () in regexp at
D:\InetPub\www.DxAgent.dk\webmaster\scr
> ipt\DxNews.pl line 296.

Det virker skam aldeles udmærket, prøv for eksempel:

$strHREFLink = "BLABLA/blublu/BLEBlE";
print "Link var $strHREFLink\n";
$strHREFPath = "BLABLA/";
$strHREFLink =~ s/$strHREFPath//i; # Remove Path from filename
print "Link er nu $strHREFLink\n Path fjernet er $strHREFPath\n";

Det virker da fint...

Tariq



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

Månedens bedste
Årets bedste
Sidste års bedste