Page 1 of 1

Perl regex Problem - Gelöst

Posted: 2003-07-17 20:37
by alexander newald
Hallo,

ich habe in Perl eine Variable

$a = "Irgendein Text <LINK=linkname>Linktext</LINK> Resttext";

<LINK=linkname> sol ersetzt werden.

Dabei soll aus <LINK= <A HREF=" werden
und aus linkname die Url die in einer DB mit linkname verknüpft ist mit linkname angehängt (Wobei es eigendlich egal ist, wo der Link zu linkname herkommt).

Es muss also irgendwie linkname rausgefiltert werden und dann zurückgeschrieben werden.

linkname ist also z.B. www.domain.de/page/index.php?a=

Dann soll $a hinterher lauten

$a = "Irgendein Text <A HREF='http://www.domain.de/page/index.php?a=l ... inktext</A> Resttext";

Re: Perl regex Problem

Posted: 2003-07-17 20:48
by olaf.dietsche
Ungetestet, aber so könnte es gehen:

Code: Select all

my %datenbank = (
linkname => 'www.domain.de/page/index.php?a='
);

$a = "Irgendein Text <LINK=linkname>Linktext</LINK> Resttext";
$a =~ m/<LINK=(.*?)>/;
my $href = $datenbank{$1};
$a =~ s/<LINK=/<A HREF=$href/;
$a =~ s/</LINK>/</A>/;

Re: Perl regex Problem - Gelöst

Posted: 2003-07-17 20:52
by alexander newald
Sieht schon fast gut aus. Ich wusste garnicht, dass sich $1 auch weiter ausserhalb der regex nutzen läßt.
#!/usr/bin/perl

$a = "Irgendein Text <LINK=linkname>Linktext</LINK> Resttext";

$b = "http://www.domain.de/page/index.php?a=";

$a =~ m/<LINK=(.*?)>/;
$a =~ s/<LINK=/<A HREF=$b/;
$a =~ s/</LINK>/</A>/;

print $a."n";

Code: Select all

Irgendein Text LINK>A HREF=http://www.domain.de/page/index.php?a=linkname>Linktext</LINK> Resttext

Re: Perl regex Problem - Gelöst

Posted: 2003-07-17 21:02
by alexander newald
Hallo, hier die Lösung:

Code: Select all

#!/usr/bin/perl
$a = "Irgendein Text <LINK=linkname>Linktext</LINK> Resttext";
$links{linkname} = "http://www.domain.de/page/index.php?a=";
$a =~ m/<LINK=(.*?)>/g;
$b = $links{$1}.$1."'";
$a =~ s/<LINK=$1/<A HREF="$b/g;
$a =~ s/</LINK>/</A>/g;
print $a."n";

Re: Perl regex Problem - Gelöst

Posted: 2003-07-23 10:15
by tuxyso
Hätte noch eine kürzere Lösung zu bieten:

Code: Select all

#!/usr/bin/perl
$a = "Irgendein Text <LINK=linkname>Linktext</LINK> Resttext";
$links{linkname} = "http://www.domain.de/page/index.php?a=";
$a =~ s/<LINK=([^>]*)>(.*)</LINK>/sprintf"<A HREF="$links{$1}$1">$2</A>"/ge;
print "$an";