Code://([^_]*)_([^_]*)_([^_]*)/
Ergebnis 1 bis 10 von 18
- 22.05.2010, 00:40 #1
RegEx Problem
RegEx waren noch nie mein Ding

Ich brauch eine RegEx für folgende Situation:
Auf einer Website sollen Bilder/PDF hochgeladen werden. Diese sollen nach dem Upload duplizierbar sein.
Daher wird beim ersten duplizieren aus test.jpg test_copy_123456.jpg wobei 123456 für eine Art timestamp steht (tickcount), da dieser wirklich immer einzigartig ist.
Soweit so gut. Wenn ich jetzt das Bild test_copy_123456.jpg duplizieren will muss es ja wieder neu benannt werden.
Daher bräuchte ich eine RegEx, die genau den String _copy_ sowie [0-9] findet. Mit "_copy_[0-9]" funktioniert es nicht, ebensowenig mit "[_copy_0-9]". Zweitere würde zwar funktionieren, findet allerdings auch das p in jpg
Lässt sich sowas überhaupt mit RegEx bewerkstelligen? Any idea?VAYA CON TIOZ
Helden leben lange -Legenden sterben nie!
La Ultima Cerveza!
- 22.05.2010, 11:43 #2
Geändert von _linx_ (22.05.2010 um 11:57 Uhr)
- 22.05.2010, 12:36 #3
Geht leider nicht, da wird bei duplizieren von test_copy_123456.jpg ein test_copy_123456_copy_123456.jpg draus.
Ich muss glaub ich mal bissel mehr Infos rausrücken
Zeile 1 setzt einen neuen Tickcount, der einmalig ist.Code:<cfset x=gettickcount()> <cfset newname=rereplace(session.cfoshoppingcard.special[attributes.pid].img[attributes.dupliziere].name,"//([^_]*)_([^_]*)_([^_]*)/","","All")> <cfset newname=listfirst(newname,".")&"_copy_"&x&"."&listlast(newname,".")> <cffile action="rename" destination="#expandpath('.')#/uploads/#session.id#/#newname#" source="#expandpath('.')#/uploads/#session.id#/#session.cfoshoppingcard.special[attributes.pid].img[attributes.dupliziere].name#">
In Zeile 2 wird der in der Session gespeicherte Dateiname nach der RegEx durchsucht und diese entfernt.
In Zeile 3 wird der neue Name, der nun kein _copy_123456 mehr enthalten sollte, neu zusammengesetzt.
Hierzu wird der Name als Liste behandelt, deren Seperator der Punkt ist. Listfirst liefert also den Dateinamen und Listlast die Dateiendung. Dazwischen wird der String _copy_ und die Variable X eingefügt.VAYA CON TIOZ
Helden leben lange -Legenden sterben nie!
La Ultima Cerveza!
- 22.05.2010, 16:13 #4
Hi,
wenn ich als Grundlage ein "test_123456.jpg" nehme und daraus dann ein "test_copy_123456.jpg" machen will stellt sich mir die Frage warum es kein "copy_test_12345.jpg" oder "test_12345_copy.jpg" sein kann. Antwort: Ist zu einfach
Aber machs dir doch nicht so schwer, gibt auch einfacherer Lösungen:
Aus "test12345.jpg" wird "test_12345_copy.jpg":
Du kannst natürlich auch einfach mittels Regexp die Zahlen suchen, sowas z.B.:Code:$newfilename = basename("test_12345.jpg",".jpg") + "_copy.jpg";
"([:digit:]*)".
Funktioniert prima in sed:
cuCode:mac:~ steinchen$ echo "test_123_bleh.jpg" | sed -E -e 's/([[:digit:]]*)//g' test__bleh.jpg mac:~ steinchen$
They have this game where you put in a dollar and win four quarters! I win every time!
- 22.05.2010, 17:01 #5
Hallo Steinchen, die Grundlage ist test.jpg nicht test_123456.jpg

Das Problem ist, das auch Kopien von der Kopie der Kopie der Kopie ... möglich sein sollen. Daher auch der tickcount, damit sichergestellt ist dass es einen Dateinamen nur einmal geben kann. Dazu kommt natürlich noch, das ich vorher nicht weiß, wie die Dateien heißen werden, da diese von Usern hochgeladen werden.
Ziel ist also beim Beispiel test.jpg, das alle Kopien, egel ob direkt oder Kopie von der Kopie
test_copy_tickcount.jpg heißen sollen. Wobei tickcount eine Zahlenfolge ist, die im Prinzip dem Unix timestamp ähnelt und daher immer einzigartig ist.VAYA CON TIOZ
Helden leben lange -Legenden sterben nie!
La Ultima Cerveza!
- 22.05.2010, 17:04 #6Seestermüher Zitronenapfel
- Registriert
- 11.2006
- Ort
- Ruhrgebiet und Niederrhein
- Beiträge
- 6.085
Wie werden die Dateien denn hochgeladen? per PHP und Webinterface?
Viel Technik als Mittel zum Zweck....
23 weis alles, 42 ist die Antwort und 242 steht außer Frage
Ich danke euch allen. Selten so gut gelacht.
Wer Ironie findet, darf sie behalten/RTFMBei der Lösungssuche: selbst mitdenken hilft auch.
Welle:Erdball - Nur tote Frauen sind schön - Lieber Gott
- 22.05.2010, 17:08 #7
ColdFusion und jQuery, da Multiupload. Aber die Technik ist ja erstmal zweitrangig. es fehlt an der passenden RegEx.
VAYA CON TIOZ
Helden leben lange -Legenden sterben nie!
La Ultima Cerveza!
- 22.05.2010, 17:59 #8
Hi,
ich glaub die Technik ist hier mitunter entscheidend. Ich würde mir einen Hash per Zufall erzeugen un diesen als Dateinamen benutzen. Auch bei Kopien o.ä. Damit umgehst du all deine Probleme.
Den Namen würde ich dann in der DB verlinken und fertig.
cuThey have this game where you put in a dollar and win four quarters! I win every time!
- 23.05.2010, 17:47 #9
Also ich hab die RegEx jetzt zumindest soweit, das sie wirklich das vollständige wort sucht:
[(_copy_)0-9]
Allerdings müsste ich jetzt noch sagen können, das Zahlen nur nach dem Wort entfernt werden. Derzeit ist es so:
Aus IMG_0014.JPG wird beim duplizieren IMG_xl_copy_1274616989028.JPG. Es werden also alle Ziffern entfernt.
Wenn ich danach dann IMG_xl_copy_1274616989028.JPG dupliziere wird daraus IMG_xl_copy_1274616982771.JPG
Es scheitert nun also nur noch daran, dass alle Ziffern entfernt werden, statt nur derer, die auf _copy_ folgen.VAYA CON TIOZ
Helden leben lange -Legenden sterben nie!
La Ultima Cerveza!
- 23.05.2010, 18:19 #10
Hä?
Nur die Ziffern entfernen die auf Copy folgen und alle anderen stehen lassen? Wo in deinem Beispiel ist denn ein Name wo Ziffern *VOR* copy stehen.
Ich denke du hast hier ein hausgemachtes Problem das sich viel einfacher lösen lassen würde die das, was du da vor hast.
Einfach mal nicht um die Ecke denken hilft.
cuThey have this game where you put in a dollar and win four quarters! I win every time!


Zitieren


