🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
5 messages
5 total messages Started by Krzysztof Krzyżaniak Thu, 02 Dec 2010 15:08
regexp do wycinania parametrów z urla
#52067
Author: Krzysztof Krzyżaniak
Date: Thu, 02 Dec 2010 15:08
70 lines
2974 bytes
Potrzebowałbym znaleźć regexp który mi wytnie jeden parametr z urla i
zrobi url bez tego parametru, konkretne to wycięcie image=cos lub image=

czyli np. 

/index.php?test=1&image=cos&p=2 => /index.php?test=1&p=2
/index.php?test=1&image=cos&p=2&r=4 => /index.php?test=1&p=2&r=4
/index.php?b=2&a=1&image=cos&p=2&r=4 => /index.php?b=2&a=1&p=2&r=4
/index.php?image=cos&p=3 => /index.php?p=3
/index.php?image=&p=3 => /index.php?p=3
/index.php?p2=2&image=cos => /index.php?p2=2
/index.php?title=image&sometest=1 => /index.php?title=image&sometest=1
/index.php?title=image&someimage=data&test=1 => /index.php?title=image&sometest=1
/index.php?title=image&someimage=data&test=1 => /index.php?title=image&someimage=data&test=1

#!/usr/bin/perl

use common::sense;

my @b = (
   "/index.php?test=1&image=cos&p=2",
   "/index.php?test=1&image=cos&p=2&r=4",
   "/index.php?b=2&a=1&image=cos&p=2&r=4",
   "/index.php?image=cos&p=3",
   "/index.php?image=&p=3",
   "/index.php?p2=2&image=cos",
   "/index.php?title=image&sometest=1",
   "/index.php?title=image&someimage=data&test=1"
);

my @a = (
   "/index.php?test=1&p=2",
   "/index.php?test=1&p=2&r=4",
   "/index.php?b=2&a=1&p=2&r=4",
   "/index.php?p=3",
   "/index.php?p=3",
   "/index.php?p2=2",
   "/index.php?title=image&sometest=1",
   "/index.php?title=image&someimage=data&test=1"
);

my $r = '([^&]*)image=[^&]*&*(.*)';
my $i = 0;
for my $t ( @b ) {
    print $t;
    $t =~ s/$r/\1\2/;
    if ( $t eq  $a[ $i ] ) {
       say " => $t OK";
    }
    else {
       say " => $t <> $a[ $i ] ERROR";
    }
    $i++;
}

wysypuje się na dwóch przykładach:

/index.php?p2=2&image=cos => /index.php?p2=2& <> /index.php?p2=2 ERROR
/index.php?title=image&someimage=data&test=1 => /index.php?title=image&sometest=1 <> /index.php?title=image&someimage=data&test=1 ERROR


i w sumie po pół godzinie nie jestem już pewien czy da się to zrobić
regexpem. Jakieś szybkie pomysły?

  eloy
-- 
-------e-l-o-y----------------------------e-l-o-y-@-k-o-f-e-i-n-a-.-n-e-t------

       jak to dobrze, że są oceany - bez nich byłoby jeszcze smutniej
Re: regexp do wycinania parametrów z urla
#52069
Author: Maciej Misiak
Date: Thu, 02 Dec 2010 15:59
24 lines
1824 bytes
W dniu 2010-12-02 16:08, Krzysztof Krzyżaniak pisze:
>
> wysypuje się na dwóch przykładach:
>
> /index.php?p2=2&image=cos =>  /index.php?p2=2&  <>  /index.php?p2=2 ERROR
> /index.php?title=image&someimage=data&test=1 =>  /index.php?title=image&sometest=1<>  /index.php?title=image&someimage=data&test=1 ERROR
>
>
> i w sumie po pół godzinie nie jestem już pewien czy da się to zrobić
> regexpem. Jakieś szybkie pomysły?

Druga sprawa dałaby się załatwić przez \bimage, czyli zaznaczyć, że jest 
word boundary przed 'image'.
Natomiast pierwsza tak na szybko to alternatywą. Więc razem coś takiego:

my $re='([^&]*)\bimage=[^&]*&*(.*)|&image=[^&]*$'

A może w ogóle uprościć i usuwać & przed a nie po? Bo przed zawsze będzie:

my $re='&image=[^&]*'


-- 
grizzley
Re: regexp do wycinania parametrów z urla
#52071
Author: Krzysztof Krzyżaniak
Date: Fri, 03 Dec 2010 10:42
32 lines
2027 bytes
Maciej Misiak <grizzley@poczta.onet.pl> writes:

> W dniu 2010-12-02 16:08, Krzysztof Krzyżaniak pisze:
>>
>> wysypuje się na dwóch przykładach:
>>
>> /index.php?p2=2&image=cos =>  /index.php?p2=2&  <>  /index.php?p2=2 ERROR
>> /index.php?title=image&someimage=data&test=1 =>  /index.php?title=image&sometest=1<>  /index.php?title=image&someimage=data&test=1 ERROR
>>
>>
>> i w sumie po pół godzinie nie jestem już pewien czy da się to zrobić
>> regexpem. Jakieś szybkie pomysły?
>
> Druga sprawa dałaby się załatwić przez \bimage, czyli zaznaczyć, że jest
> word boundary przed 'image'.
> Natomiast pierwsza tak na szybko to alternatywą. Więc razem coś takiego:
>
> my $re='([^&]*)\bimage=[^&]*&*(.*)|&image=[^&]*$'

To działa, dzięki.

> A może w ogóle uprościć i usuwać & przed a nie po? Bo przed zawsze będzie:
>
> my $re='&image=[^&]*'

Nie zawsze, może być index.php?image=p

  eloy
-- 
-------e-l-o-y----------------------------e-l-o-y-@-k-o-f-e-i-n-a-.-n-e-t------

       jak to dobrze, że są oceany - bez nich byłoby jeszcze smutniej
Re: regexp do wycinania parametrów z urla
#52073
Author: Maciej Misiak
Date: Fri, 03 Dec 2010 11:11
35 lines
2246 bytes
W dniu 2010-12-03 11:42, Krzysztof Krzyżaniak pisze:
> Maciej Misiak<grizzley@poczta.onet.pl>  writes:
>
>> W dniu 2010-12-02 16:08, Krzysztof Krzyżaniak pisze:
>>>
>>> wysypuje się na dwóch przykładach:
>>>
>>> /index.php?p2=2&image=cos =>   /index.php?p2=2&   <>   /index.php?p2=2 ERROR
>>> /index.php?title=image&someimage=data&test=1 =>   /index.php?title=image&sometest=1<>   /index.php?title=image&someimage=data&test=1 ERROR
>>>
>>>
>>> i w sumie po pół godzinie nie jestem już pewien czy da się to zrobić
>>> regexpem. Jakieś szybkie pomysły?
>>
>> Druga sprawa dałaby się załatwić przez \bimage, czyli zaznaczyć, że jest
>> word boundary przed 'image'.
>> Natomiast pierwsza tak na szybko to alternatywą. Więc razem coś takiego:
>>
>> my $re='([^&]*)\bimage=[^&]*&*(.*)|&image=[^&]*$'
>
> To działa, dzięki.
>
>> A może w ogóle uprościć i usuwać&  przed a nie po? Bo przed zawsze będzie:
>>
>> my $re='&image=[^&]*'
>
> Nie zawsze, może być index.php?image=p

Ach fakt. W takim razie jeszcze pytajnik jako alternatywa do & z przodu 
i powinno być git:

my $re='[&?]image=[^&]*'

-- 
grizzley
Re: regexp do wycinania parametrów z urla
#52074
Author: Krzysztof Krzyżaniak
Date: Fri, 03 Dec 2010 11:50
47 lines
2581 bytes
Maciej Misiak <grizzley@poczta.onet.pl> writes:

> W dniu 2010-12-03 11:42, Krzysztof Krzyżaniak pisze:
>> Maciej Misiak<grizzley@poczta.onet.pl>  writes:
>>
>>> W dniu 2010-12-02 16:08, Krzysztof Krzyżaniak pisze:
>>>>
>>>> wysypuje się na dwóch przykładach:
>>>>
>>>> /index.php?p2=2&image=cos =>   /index.php?p2=2&   <>   /index.php?p2=2 ERROR
>>>> /index.php?title=image&someimage=data&test=1 =>   /index.php?title=image&sometest=1<>   /index.php?title=image&someimage=data&test=1 ERROR
>>>>
>>>>
>>>> i w sumie po pół godzinie nie jestem już pewien czy da się to zrobić
>>>> regexpem. Jakieś szybkie pomysły?
>>>
>>> Druga sprawa dałaby się załatwić przez \bimage, czyli zaznaczyć, że jest
>>> word boundary przed 'image'.
>>> Natomiast pierwsza tak na szybko to alternatywą. Więc razem coś takiego:
>>>
>>> my $re='([^&]*)\bimage=[^&]*&*(.*)|&image=[^&]*$'
>>
>> To działa, dzięki.
>>
>>> A może w ogóle uprościć i usuwać&  przed a nie po? Bo przed zawsze będzie:
>>>
>>> my $re='&image=[^&]*'
>>
>> Nie zawsze, może być index.php?image=p
>
> Ach fakt. W takim razie jeszcze pytajnik jako alternatywa do & z przodu i
> powinno być git:
>
> my $re='[&?]image=[^&]*'

nope, 

/index.php?image=cos&p=3 => /index.php&p=3 <> /index.php?p=3 ERROR
/index.php?image=&p=3 => /index.php&p=3 <> /index.php?p=3 ERROR

Ale pierwsza propozycja działa i powinna przejść w varniszu :)

  eloy
-- 
-------e-l-o-y----------------------------e-l-o-y-@-k-o-f-e-i-n-a-.-n-e-t------

       jak to dobrze, że są oceany - bez nich byłoby jeszcze smutniej
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads