|
| Hjælp til regex Fra : Mikkel Z. Herold |
Dato : 07-05-08 13:50 |
|
Endnu engang sidder jeg og roder med et regex, som jeg ikke kan få til
at virke:
Jeg vil gerne have den til at lave en sti som denne
"/mappe/billede10.png" om til
"/shared/show_image.html?src=/mappe/billede.png&width=10"
Til det formål har jeg lavet dette regex, som virker:
ereg_replace("^([a-z_\/\._]*)([0-9]*)([a-z\.]*)$",
"/shared/show_image.html?src=/\\1\\3&width=\\2", $string)
Så langt så godt, men nu vil jeg gerne kunne tilføje en valgfri
parameter, hvis og kun hvis den oprindelige sti har et "f" efter
billednummeret, altså hvis stien hedder f.eks. "/mappe/billede10f.png",
så skal der sættes en ekstra parameter på den omformede sti, så den
kommer til at hedde
"/shared/show_image.html?src=mappe/billede.png&width=10&fixed_size=yes"
Og det er her, det går galt. Det er ikke noget problem at tjekke, om der
er et "f" - det gør jeg med ^([a-z_\/\._]*)([0-9]*)(f)?([a-z\.]*)$ - men
hvordan får jeg det f omformet til strengen "&fixed_size=yes" i den nye
streng, og vel at mærke kun, når der er et f - ellers skal der ikke
sættes noget ind.
Det bliver altid noget rodet, når man skal forklare sine regexp's, men
jeg håber, det giver mening!
Mvh. Mikkel
--
"At first just a rustle of canvas
And the gentlest breath on my face"
Sting, "The Wild Wild Sea"
| |
Peter Brodersen (07-05-2008)
| Kommentar Fra : Peter Brodersen |
Dato : 07-05-08 15:28 |
|
On Wed, 07 May 2008 14:50:07 +0200, "Mikkel Z. Herold"
<mikkel@[remove_this]mzh.dk> wrote:
>ereg_replace("^([a-z_\/\._]*)([0-9]*)([a-z\.]*)$",
>"/shared/show_image.html?src=/\\1\\3&width=\\2", $string)
>
>Så langt så godt, men nu vil jeg gerne kunne tilføje en valgfri
>parameter, hvis og kun hvis den oprindelige sti har et "f" efter
>billednummeret, altså hvis stien hedder f.eks. "/mappe/billede10f.png",
>så skal der sættes en ekstra parameter på den omformede sti, så den
>kommer til at hedde
>"/shared/show_image.html?src=mappe/billede.png&width=10&fixed_size=yes"
>
>Og det er her, det går galt. Det er ikke noget problem at tjekke, om der
>er et "f" - det gør jeg med ^([a-z_\/\._]*)([0-9]*)(f)?([a-z\.]*)$ - men
>hvordan får jeg det f omformet til strengen "&fixed_size=yes" i den nye
>streng, og vel at mærke kun, når der er et f - ellers skal der ikke
>sættes noget ind.
Hvis du har en god del omstændigheder, du gerne vil tage højde for, kan du
eventuelt gøre det i to led og starte med en ereg (eller preg_match) og så
i ro og mag med et par if-strukturer danne den url, du ønsker.
Og så slutte med en almindelig søg og erstat.
Altså, ret din ereg_replace til if (ereg(..)) og skab så din url ved at
tjekke de matchede værdier.
Hvis du kun vil lave ét match, kan du bruge preg_replace og /e-flaget, og
så have en funktion til at danne url'en.
--
- Peter Brodersen
Kendt fra Internet
| |
Mikkel Z. Herold (07-05-2008)
| Kommentar Fra : Mikkel Z. Herold |
Dato : 07-05-08 22:00 |
|
On 07-05-2008 16:28 Peter Brodersen wrote:
> Hvis du har en god del omstændigheder, du gerne vil tage højde for, kan du
> eventuelt gøre det i to led og starte med en ereg (eller preg_match) og så
> i ro og mag med et par if-strukturer danne den url, du ønsker.
Ja, men problemet er bare, at jeg skal have det smidt i en htaccess-fil
i forbindelse med noget url rewrite, så jeg kan vist ikke rigtig splitte
det op.
Så vidt jeg har kunnet læse mig til, er der noget der hedder conditional
regex'er - er der nogen, der har erfaring med det?
Mvh. Mikkel
--
"At first just a rustle of canvas
And the gentlest breath on my face"
Sting, "The Wild Wild Sea"
| |
Martin (07-05-2008)
| Kommentar Fra : Martin |
Dato : 07-05-08 22:29 |
|
Mikkel Z. Herold wrote:
> On 07-05-2008 16:28 Peter Brodersen wrote:
>> Hvis du har en god del omstændigheder, du gerne vil tage højde for,
>> kan du
>> eventuelt gøre det i to led og starte med en ereg (eller preg_match)
>> og så
>> i ro og mag med et par if-strukturer danne den url, du ønsker.
>
> Ja, men problemet er bare, at jeg skal have det smidt i en htaccess-fil
> i forbindelse med noget url rewrite, så jeg kan vist ikke rigtig splitte
> det op.
>
> Så vidt jeg har kunnet læse mig til, er der noget der hedder conditional
> regex'er - er der nogen, der har erfaring med det?
Jeps - har dog ikke lige nogle eksempler liggende (ligger på en kundes
ftp, og den har jeg ikke lige adgang til PT)
Anyway, så hedder det RedirectMatch - altså redirect hvis det matcher,
og hvis ikke så fortsætter den til næste RedirectMatch.
Der er vist også noget med nogle flags man kan sætte i enden L mener jeg
det er, også kan man bruge RewriteRule .... [L]
Men jeg ville nok hoppe over i Apache gruppen, hvis du vil have
yderligere hjælp til htaccess - derovre ved de en HELT masse - men
dokumentationen(1) er altså heller ikke så ringe endda
1) < http://httpd.apache.org/docs/2.0/howto/htaccess.html>
| |
Martin (07-05-2008)
| Kommentar Fra : Martin |
Dato : 07-05-08 22:29 |
| | |
Mikkel Z. Herold (07-05-2008)
| Kommentar Fra : Mikkel Z. Herold |
Dato : 07-05-08 22:37 |
| | |
Mikkel Z. Herold (07-05-2008)
| Kommentar Fra : Mikkel Z. Herold |
Dato : 07-05-08 23:03 |
|
On 07-05-2008 23:37 Mikkel Z. Herold wrote:
>> < http://httpd.apache.org/docs/2.0/misc/rewriteguide.html>
>
> Takker - det vil jeg tjekke!
Well - nogle gange er løsningen så enkel, at man helt overser den! Man
kan selvfølgelig bare lave to RewriteRules i htaccess, én der matcher
stier med "f", og en der matcher stier uden "f" - sådan her:
RewriteEngine on
RewriteRule ^([a-z_\/\._]*)([0-9]*)(f)([a-z\.]*)$
/shared/show_image.html?src=/$1$4&width=$2&fixed_size=yes [R]
RewriteRule ^([a-z_\/\._]*)([0-9]*)([a-z\.]*)$
/shared/show_image.html?src=/$1$3&width=$2 [R]
Ingen grund til fancy conditionals - men de kunne nu være sjove at lære
alligevel.
Mikkel
--
"At first just a rustle of canvas
And the gentlest breath on my face"
Sting, "The Wild Wild Sea"
| |
Michael Zedeler (07-05-2008)
| Kommentar Fra : Michael Zedeler |
Dato : 07-05-08 22:41 |
|
Mikkel Z. Herold wrote:
> Endnu engang sidder jeg og roder med et regex, som jeg ikke kan få til
> at virke:
>
> Jeg vil gerne have den til at lave en sti som denne
> "/mappe/billede10.png" om til
> "/shared/show_image.html?src=/mappe/billede.png&width=10"
>
> Til det formål har jeg lavet dette regex, som virker:
>
> ereg_replace("^([a-z_\/\._]*)([0-9]*)([a-z\.]*)$",
> "/shared/show_image.html?src=/\\1\\3&width=\\2", $string)
>
> Så langt så godt, men nu vil jeg gerne kunne tilføje en valgfri
> parameter, hvis og kun hvis den oprindelige sti har et "f" efter
> billednummeret, altså hvis stien hedder f.eks. "/mappe/billede10f.png",
> så skal der sættes en ekstra parameter på den omformede sti, så den
> kommer til at hedde
> "/shared/show_image.html?src=mappe/billede.png&width=10&fixed_size=yes"
>
> Og det er her, det går galt. Det er ikke noget problem at tjekke, om der
> er et "f" - det gør jeg med ^([a-z_\/\._]*)([0-9]*)(f)?([a-z\.]*)$ - men
> hvordan får jeg det f omformet til strengen "&fixed_size=yes" i den nye
> streng, og vel at mærke kun, når der er et f - ellers skal der ikke
> sættes noget ind.
Det kan jeg ikke lige se hvordan du kan lave. Hvis der er tale om
udvidede pcre-kompatible udtryk, kan man måske slippe afsted med noget,
men det er ikke særlig oplagt.
Kan du ikke nøjes med at omskrive sådan her:
billede10f.png -> billede.png&width=10¶meters=f
og
billede10f.png -> billede.png&width=10¶meters=
Hvis det er dig der skriver scriptet der modtager værdierne og det er
php, burde det virke udemærket.
Nu hvor du bruger mod_rewrite, har du så undersøgt om ikke bare man kan
få den til at lave en serie af omskrivninger? Det burde kunne lade sig
gøre at løse problemet på den måde.
Mvh. Michael.
| |
|
|