Perl regex Problem - Gelöst

Bash, Shell, PHP, Python, Perl, CGI
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Perl regex Problem - Gelöst

Post 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";
Last edited by alexander newald on 2003-07-17 22:43, edited 1 time in total.
olaf.dietsche
Posts: 401
Joined: 2002-12-19 02:06
Location: Siegburg

Re: Perl regex Problem

Post 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>/;
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Re: Perl regex Problem - Gelöst

Post 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
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Re: Perl regex Problem - Gelöst

Post 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";
tuxyso
Posts: 38
Joined: 2003-05-21 08:24

Re: Perl regex Problem - Gelöst

Post 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";