/ 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
Pattern matching
Fra : Erik Kjær-Larsen


Dato : 29-08-01 22:38

Hej

Jeg prøver at rette et server-log perl program (AXS) til, så det kan
tage højde for andre søgemaskiner.

Det er lykkes mig at gøre det for en del søgemaskiner, men Kvasir
skaber problemer. Der er 2 typer url fra Kvasir som bliver logget. Den
første type går godt nok, men den næste type virker ikke.

Perl linjen ser sådan ud:
elsif (/\:\/\/([^\/]*)kvasir\.([^\/]*).*[\?\&]{1}q=([^\&]+)/i) {
   ($Host,$Domain,$Terms) = ($1,$2,&Escape($3));
   return "<A HREF=\"$_\"$TARGET>$Host"."Kvasiir.$Domain</A>
<I>$Terms</I>";
}

(&Escape() funktionen ændre blot + til mellemrum og retter danske
bogstaver til etc.)

Den første parentes ([^\/]*) matcher det der måtte stå foran .kvasir
(hvis der er noget).

Den næste parentes ([^\/]*) matcher det dk der står bag ved kvasir
(lidt overflødigt, hvis Kvasir ikke findes i andre lande, men hva).

Den sidste parentes ([^\&]+)/i) burde matche det der er søgt på. Før
parentesen skal der være enten et ? tegn eller et & tegn [1], derefter
et q og så et = tegn [2]. Det vil altså sige ?q= eller &q=

[1] [\?\&]{1}
[2] q=

Det virker godt nok på disse 3 linjer:

http://kvasir.sol.dk/query?q=triax+75&pg=q&kl=&what=dk
http://search.kvasir.sol.dk/query?q=ciabatta&kl=&what=dk
http://search.kvasir.sol.dk/query?q=energi+fedt+procent&kl=&what=dk

Det giver følgende output:

Kvasiir.sol.dk triax 75
search.Kvasiir.sol.dk ciabatta
search.Kvasiir.sol.dk energi fedt procent

Desværre virker det ikke på de følgende linjer:

http://search.kvasir.sol.dk/query?what=dk&q=fedtfattige+opskrifter&lang=dk&language=
http://search.kvasir.sol.dk/query?what=dk&q=n%E6ringsindhold&submit=++S%F8g++&lang=dk&language=

Disse linjer bliver simpelthen ikke matchet. Jeg kan ikke regne ud
hvad der er galt. Er der mon nogen der kan hjælp mig?

Mvh
Erik
--
www.lidtfedt.dk
inspiration til et bedre liv med fedtfattig mad og motion.

 
 
Nezar Nielsen (29-08-2001)
Kommentar
Fra : Nezar Nielsen


Dato : 29-08-01 23:25

"Erik Kjær-Larsen" <eriktina@hotmail.com> wrote in message
news:j6nqotc0k9vev15s84p9a9tccs707dvq2v@4ax.com...
> Hej
>
> Jeg prøver at rette et server-log perl program (AXS) til, så det kan
> tage højde for andre søgemaskiner.
>
> Perl linjen ser sådan ud:
> elsif (/\:\/\/([^\/]*)kvasir\.([^\/]*).*[\?\&]{1}q=([^\&]+)/i) {
> ($Host,$Domain,$Terms) = ($1,$2,&Escape($3));
> return "<A HREF=\"$_\"$TARGET>$Host"."Kvasiir.$Domain</A>
> <I>$Terms</I>";
> }

Hej Erik,

Bruger du en mystisk version af perl eller lign ? Ellers må det være dit
&Escape kald der ødelægger noget for dig..

Jeg har lige prøvet følgende(linierne bliver splittet op af min newsklient,
men forestil dig at de stadig er på en linie hver):

foreach my $line(
'http://kvasir.sol.dk/query?q=triax+75&pg=q&kl=&what=dk',
'http://search.kvasir.sol.dk/query?q=ciabatta&kl=&what=dk',
'http://search.kvasir.sol.dk/query?q=energi+fedt+procent&kl=&what=dk',

'http://search.kvasir.sol.dk/query?what=dk&q=fedtfattige+opskrifter&lang=dk&
language=',

'http://search.kvasir.sol.dk/query?what=dk&q=n%E6ringsindhold&submit=++S%F8g
++&lang=dk&language=',
){
$line=~/\:\/\/([^\/]*)kvasir\.([^\/]*).*[\?\&]{1}q=([^\&]+)/i;
print "1:$1\n2:$2\n3:$3\n".('-'x40)."\n";
}


Og outputtet jeg fik ud var:

1:
2:sol.dk
3:triax+75
----------------------------------------
1:search.
2:sol.dk
3:ciabatta
----------------------------------------
1:search.
2:sol.dk
3:energi+fedt+procent
----------------------------------------
1:search.
2:sol.dk
3:fedtfattige+opskrifter
----------------------------------------
1:search.
2:sol.dk
3:n%E6ringsindhold
----------------------------------------

--
Mvh. Nezar Nielsen
http://fez.dk/




Erik Kjær-Larsen (30-08-2001)
Kommentar
Fra : Erik Kjær-Larsen


Dato : 30-08-01 02:41

On Thu, 30 Aug 2001 00:25:10 +0200, "Nezar Nielsen" <tumpen@fez.dk>
wrote:

>Hej Erik,
>
>Bruger du en mystisk version af perl eller lign ? Ellers må det være dit
>&Escape kald der ødelægger noget for dig..

Nej, det skulle jeg ikke mene. Det virker hverken på min egen
opsætning på min PC'er (ActivePerl og Apache) eller hos mit web-hotel.

<snip program>

oh my.... jeg havde faktisk slet ikke prøvet at køre det som
perl-program alene. Kun kørt det som perl-program via web-server.
Regner ikke med det skulle gøre forskel. MEN det gør det!!!

Jeg prøvede lige at køre dit program i en dos boks - og det virker
perfekt. Nå... kunne det virkelig være escape funktionen. Nej - virker
stadivæk ikke når det køres over web-serveren og escape funktionen
slettet... Nu er gode råd dyre....

Prøve prøve prøve... aha... det er kun det & tegn der er problemer
med. Prøvede frem i flere timer. Kom frem med noget der virker og som
ser sådan ud:

elsif (/\:\/\/([^\/]*)kvasir\.([^\/]*).*(\?|&.{4})q=([^\&]+)/i) {
   ($Host,$Domain,$Terms) = ($1,$2,&Escape($4));
   return "<A HREF=\"$_\"$TARGET>$Host"."Kvasiir.$Domain</A>
<I>$Terms</I>";
   }

SE det virker!!! Godt nok ikke alene i perl i dos-boksen, men på
web-serveren. Det ser ud til, at når man kører det via web-serveren,
så bliver der puttet 4 tegn (mellemrum? har faktisk ikke tjekket det)
ind efter et & tegn. Har tjekket min fil. Der er ingen mellemrum. Har
printet variablen ud på skærmen - der er ingen mellemrum eller andet
haløjsa..... Det er godt nok mystisk!!!!

Nå. Nu har jeg løst det og må gå i seng Tak for ideen med at køre
det i dos-boks. Det havde jeg slet ikke tænkt på. Var sikker på at jeg
havde lavet en logisk fejl i min pattern.

Mvh
Erik
--
www.lidtfedt.dk
inspiration til et bedre liv med fedtfattig mad og motion.

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

Månedens bedste
Årets bedste
Sidste års bedste