Kom ihåg mig?
Home Menu

Menu


Rexexp-problem

Ämnesverktyg Visningsalternativ
Oläst 2009-01-24, 01:17 #1
oddholst oddholst är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 127
oddholst oddholst är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 127
Min rubrik och beskrivning kanske inte är särskilt beskrivande men den reflekterar min frustration över att inte få det att fungera.

Jag har följande rad kod:
Citat:
if (preg_match("\/[1-9].[0-9]*[0-9a-zA-Z-]*\.(jpg|tif)",$_SERVER["REQUEST_URI"]) == 1)
och får följande fel:
Citat:
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in /xxx/x/xxxx/www/sub/imagearchive/missing.php on line 6
Jag har ett par exempel på filnamn jag vill matcha:
"/1234.jpg"
"/1234_testbild7.jpg"
"/4110_Pannkakor-med-sylt.tif"

Alltså, strängen skall innehålla följande (i ordning):
* ett snedstreck
* en serie siffror som inte börjar på noll
* eventuellt ett understreck
* eventuellt tecken som innehåller bokstäver, siffror eller bindestreck
* en punkt
* Antingen jpg eller tif, med gemener eller versaler.

Så jag behöver hjälp. Jag har försökt ett antal varianter och googlat men inte funnit någon lösning ännu....
oddholst är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 01:23 #2
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Du har glömt att du ska stoppa in en delimiter som första och sista tecken i stängen. Använd förslagsvis en slash.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 01:53 #3
oddholst oddholst är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 127
oddholst oddholst är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 127
Citat:
Originally posted by kullervo@Jan 24 2009, 02:23
Du har glömt att du ska stoppa in en delimiter som första och sista tecken i stängen. Använd förslagsvis en slash.
Aha.. det har jag missat helt. Vad är delimiters till för och varför kan man använda olika. Det fungerade för övrigt.

Jag inser att jag letar efter någon annan funktion än den i mitt första inlägg. Jag vill veta om strängen helt passar in i testet eller inte alls. Vad skall jag använda då?

Är själva uttrycket ovan i sig korrekt enligt min beskrivning?

Jag behöver en liten knuff framåt igen, tror jag...
oddholst är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 12:52 #4
oddholst oddholst är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 127
oddholst oddholst är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 127
Citat:
Ursprungligen postat av oddholst
Citat:
Ursprungligen postat av kullervo
Du har glömt att du ska stoppa in en delimiter som första och sista tecken i stängen. Använd förslagsvis en slash.
Nu har jag vaknat igen och fortsätter att plåga mig med detta och er med mina frågor.
Kod:
if (preg_match("/^\/[1-9].[0-9]*_[0-9a-zA-Z-]*\.(jpg|tif)$/",$_SERVER["REQUEST_URI"]) == 1)
Är detta test korrekt för att jag skall testa att filnamnet är som jag vill ha det och ingenting annat före eller efter?

Sen kommer nästa pilsner. Jag skall ta ut numret ur filnamnet, dvs det mellan första /-tecknet och den första icke-numeriska tecknet som kommer.

Exempel:
/12345.jpg -> 12345
/12367_Test.jpg -> 12367
/12389_Test-720.jpg -> 12389

Jag misstänker att det även här är någon regexp-funktion som kommer till användning...
oddholst är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-25, 04:09 #5
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Ursprungligen postat av oddholst
Sen kommer nästa pilsner. Jag skall ta ut numret ur filnamnet, dvs det mellan första /-tecknet och den första icke-numeriska tecknet som kommer.

Exempel:
/12345.jpg * * -> *12345
/12367_Test.jpg *-> 12367
/12389_Test-720.jpg *-> 12389

Jag misstänker att det även här är någon regexp-funktion som kommer till användning...
Kod:
if(preg_match('/^\/([1-9][0-9]*)_[0-9a-z-]*\.(?:jpg|tif)$/i',$_SERVER["REQUEST_URI"],$m)) {
$nummer = $m[1];
}
Citat:
Ursprungligen postat av oddholst
SAha.. det har jag missat helt. Vad är delimiters till för och varför kan man använda olika. Det fungerade för övrigt.
Behövs eftersom inte php har en datatyp för regexp:ar som t.ex. Perl eller JavaScript. Man kan använda olika för att slippa skriva så många "\", i t.ex. "http://" blir enklare med !http://! än "/http:\/\//" att tyda.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-25, 13:04 #6
oddholst oddholst är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 127
oddholst oddholst är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 127
Citat:
Originally posted by martine@Jan 25 2009, 05:09
Kod:
if(preg_match('/^\/([1-9][0-9]*)_[0-9a-z-]*\.(?:jpg|tif)$/i',$_SERVER["REQUEST_URI"],$m)) {
$nummer = $m[1];
}
Behövs eftersom inte php har en datatyp för regexp:ar som t.ex. Perl eller JavaScript. Man kan använda olika för att slippa skriva så många "\", i t.ex. "http://" blir enklare med !http://! än "/http:\/\//" att tyda.
Aha... jag tror jag börjar förstå. Man skickar in den variabel man använder som "bärare" av resultatet som tredje argument i preg_match.

Jag tror jag skall bli självgående i denna fråga nu. Tack för hjälpen!
oddholst är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-26, 17:40 #7
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by oddholst@Jan 25 2009, 14:04

Aha... jag tror jag börjar förstå. Man skickar in den variabel man använder som "bärare" av resultatet som tredje argument i preg_match.

Jag tror jag skall bli självgående i denna fråga nu. Tack för hjälpen!
Så kan man uttrycka det. Det är ett lite bakvänt sätt att tilldela en variabel ett värde men på så sätt men så fungerar det. Man kan med fördel granska resultatet med print_r() men det har du säkerligen redan listat ut.

Det du vill fånga in sätter du i paranteser () och om du vill slippa få med ett värde (eller undvika processorbeslatningen) så kan du använda (?: med ) istället, t.ex.:

/(Jag vill )(?:inte) /

Regexp är spännande och praktiskt men lite klurigt ibland.
martine är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 12:24.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017