Regex voor naam-gedeelte in pad

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik zit te rommelen met regular expressions, maar snap nog steeds niet hoe & waarom het niet werkt. Iemand een idee? Ik heb bijvoorbeeld de string:
/assets/img/portfolio/project/1/grote-afbeelding_res.2.highlight.jpg

Hierin is highlight een "sleutel" voor de afmeting van de afbeelding. Ik wil uiteindelijk in een .htaccess iets doorsturen als dit:
/assets/img/portfolio/project/1/.grote-afbeelding_res.2.jpg/highlight.jpg

Ik probeer het te matchen met:
\/assets\/img\/.*\/(a-zA-Z0-9.-)*
Dan krijg ik bij match #0 /assets/img/portfolio/1/, de match #1 blijft leeg

Ook probeer ik dit (een stapje verder), maar daar matcht helemaal weinig:
\/assets\/img\/.*\/(a-zA-Z0-9.-_)*\.(a-z)*\.(a-z)*
Dan zijn ineens match #0 t/m #3 leeg (ook de eerste :?).

Iemand een idee wat een regex vormt dit doet:
#0: /assets/img/portfolio/project/1/
#1: grote-afbeelding_res.2
#2: highlight
#3: jpg

Alvast grote dank voor het verlossende antwoord _/-\o_

Acties:
  • 0 Henk 'm!

  • Spiked
  • Registratie: Mei 2008
  • Laatst online: 24-07 14:50
Een punt in een regex staat voor "een willekeurig karakter"; deze moet je ook escapen in jouw geval!

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Spiked schreef op vrijdag 27 augustus 2010 @ 15:19:
Een punt in een regex staat voor "een willekeurig karakter"; deze moet je ook escapen in jouw geval!
Dat doe ik toch ook? Het is [pad] / [eerste deel bestandsnaam] . [sleutel] . [extensie]

Die punten tussen bestandsnaam & sleutel en tussen sleutel & extensie maak ik als "\.", dus een escaped period. Of zie ik toch iets over het hoofd?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
mithras schreef op vrijdag 27 augustus 2010 @ 15:25:
[...]
Dat doe ik toch ook? Het is [pad] / [eerste deel bestandsnaam] . [sleutel] . [extensie]

Die punten tussen bestandsnaam & sleutel en tussen sleutel & extensie maak ik als "\.", dus een escaped period. Of zie ik toch iets over het hoofd?
Je hebt sowieso een punt over het hoofd gezien in:
code:
1
a-zA-Z0-9.-_
en, zo op 't oog klopt de eerste punt in je regex ook niet.

[ Voor 6% gewijzigd door RobIII op 27-08-2010 15:27 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • acemoo
  • Registratie: Maart 2006
  • Laatst online: 21:12
klopt het dat de structuur zoals dit is?
/assets/img/portfolio/project/1/(deel1).(deel2).(extensie)

als het de bovenstaande structuur is, is dit misschien ongeveer wat je zoekt?
Python:
1
2
3
>>> text = "/assets/img/portfolio/project/1/grote-afbeelding_res.2.highlight.jpg"
>>> re.findall('(/assets/img/portfolio/project/1/)([a-zA-Z0-9-_\.]*)\.(.*)\.(jpg|png|gif|bmp)$', text)
[('/assets/img/portfolio/project/1/', 'grote-afbeelding_res.2', 'highlight', 'jpg')]

[ Voor 64% gewijzigd door acemoo op 27-08-2010 15:44 ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
br men schreef op vrijdag 27 augustus 2010 @ 15:39:
klopt het dat de structuur zoals dit is?
/assets/img/portfolio/project/1/(deel1).(deel2).(extensie)
:Y
als het de bovenstaande structuur is, is dit misschien ongeveer wat je zoekt?
Python:
1
2
3
>>> text = "/assets/img/portfolio/project/1/grote-afbeelding_res.2.highlight.jpg"
>>> re.findall('(/assets/img/portfolio/project/1/)([a-zA-Z0-9-_\.]*)\.(.*)\.(jpg|png|gif|bmp)$', text)
[('/assets/img/portfolio/project/1/', 'grote-afbeelding_res.2', 'highlight', 'jpg')]
*O*

Ik heb er zelf dit van gemaakt, nav je voorbeeld:
\/assets\/img\/(.*)\/([a-zA-Z0-9-_\.]*)\.(.*)\.([a-z]{2,4})

/assets/img/ is namelijk vast en de extensie wil ik graag dynamisch houden, maar verder werkt het perfect :)

Acties:
  • 0 Henk 'm!

  • acemoo
  • Registratie: Maart 2006
  • Laatst online: 21:12
Let er wel op dat je met een willekeurige extensie ook .txt en .exe en .zip krijgt.
Ik weet niet of het hier belangrijk is, maar wanneer je gebruikers bestanden laat opsturen, kan je de afbeelding extensies filteren zodat je alleen afbeeldingen krijgt en geen download linkjes naar andere bestanden.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
br men schreef op vrijdag 27 augustus 2010 @ 15:56:
Let er wel op dat je met een willekeurige extensie ook .txt en .exe en .zip krijgt.
Ik weet niet of het hier belangrijk is, maar wanneer je gebruikers bestanden laat opsturen, kan je de afbeelding extensies filteren zodat je alleen afbeeldingen krijgt en geen download linkjes naar andere bestanden.
In de upload checken we zelfs op mimetype :)

Het idee is dat het origineel onder /assets/img/portfolio/project/1/afbeelding.jpg wordt weggeschreven. Hier maken we varianten van (bijv. 200px breed met cropverhouding 1:1 of hoogte 100px met crop 16:9) die we een naampje geven (bijvoorbeeld "highlight" of "overview"). Deze bestanden worden weggeschreven onder /assets/img/portfolio/project/1/.afbeelding.jpg/overview.jpg en dit moet dus goed gebeuren met de .htaccess en rewrite rules.
Het hele systeem is slechts beheersbaar via ons cms (en niet publiekelijk) waar we veel meer controles toepassen (zoals oa mimetype dus).
Pagina: 1