Avatar billede alvion Nybegynder
08. februar 2002 - 08:47 Der er 4 kommentarer og
1 løsning

Substitutes af url'er i streng

Jeg skal lave en regexp, som 1) kan matche følgende:

href="/include/linkStyleNew.css"
href="etscript.pl"

men som 2) IKKE matcher dette:

href="http://www.mitdomain.dk/include/test.htm"

En lidt længere udredning:
I de to øverste linier skal jeg have indsat strengen "http://www.etsted.dk/", hvis strengen indenfor href (url'en) ikke allerede indeholder en komplet adresse med "http://etellerandet/".

Jeg har prøvet sådan, men det løser ikke problem nr. 2)

$baseurl = "http://www.etsted.dk/";
s/href=("?)/href=$1$baseurl/gi;

Hvis det ikke kan lade sig gøre i en/flere substitues, vil jeg gerne høre om en alternativ løsning i Perl.

Det skal lige bemærkes, at adresserne i 2) IKKE nødvendigvis er den samme, som adresesn jeg vil indsætte.
Avatar billede erikjacobsen Ekspert
09. februar 2002 - 11:11 #1
Hvis jeg forstår dig ret, så er det noget i denne stil. Jeg har lavet
en funktion til det grove :)

sub check {
  my ($s) = @_;

  if ($s=~/^http:/i) {
    return $s;
  } else {
    return "http://your.domain.xx".$s;
  }
}


$str = "<a href=\"/blip.blop\">blop</a>";

$str =~ s/href="([^"]*)"/"href=\"".(check($1))."\""/gie;

print $str;
Avatar billede erikjacobsen Ekspert
09. februar 2002 - 11:16 #2
...og det er ikke fordi jeg er langsom .... Jeg abonnerer fortsat på
Perl-gruppen, men fik først en email om det for et kvarters tid
siden. Der er vist klumper i strømmen...
Avatar billede alvion Nybegynder
09. februar 2002 - 11:50 #3
Jeg vender lige tilbage i morgen - min svigermor har føs'da
Avatar billede alvion Nybegynder
10. februar 2002 - 14:21 #4
Se det var jo virkelig elegant... Jeg var ikke klar over, at man kunne kalde funktioner inde i substitute delen af en regexp - og så oven i købet give $1 med :-) Det er hvad /e anvendes til?

Jeg har dog lige lavet din check() lidt mere Perl'sk :-)

sub check {
  return $s if (/^http:/i);
  return "http://your.domain.xx".$s;
}
Avatar billede erikjacobsen Ekspert
10. februar 2002 - 15:30 #5
Det skal du da være velkommen til. Måske man kan lave
der som en "one-liner" - men der må være en grænse.

Ja /e betyder at udregne højresiden som et strengudtryk
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester