Avatar billede safl Nybegynder
19. juni 2003 - 23:22 Der er 10 kommentarer og
1 løsning

Preg_replace problem

Hello!

preg_replace("/BEGIN:VEVENT.*$uid.*END:VEVENT/s", "", $ics_file_content);

Ovenstående preg_replace skulle gerne kun fjerne BEGIN:VEVENT <-> END:VEVENT med indholdende $uid, men den fjerner alle VEVENT'erne.

Nedenstående er et eksempel på indholdet af $ics_file_content:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Luftens Helte//iCal 1.0//DA
BEGIN:VEVENT
UID
:22222222222222222222222222222222
SUMMARY
:TEST2
END:VEVENT
BEGIN:VEVENT
UID
:11111111111111111111111111111111
SUMMARY
:TEST
END:VEVENT
END:VCALENDAR

på forhånd tak

safl
Avatar billede erikjacobsen Ekspert
19. juni 2003 - 23:30 #1
preg_replace("/BEGIN:VEVENT.*?$uid.*?END:VEVENT/s", "", $ics_file_content);
Avatar billede safl Nybegynder
19. juni 2003 - 23:36 #2
Virker fint med den første VEVENT i datafilen, men ikke med efterfølgende.
Avatar billede erikjacobsen Ekspert
19. juni 2003 - 23:38 #3
Hvordan? Den erstatter kun første forekomst, med mindre du smider et "g" på.
Avatar billede erikjacobsen Ekspert
19. juni 2003 - 23:40 #4
...vrøvl -- nu blander jeg vist noget andet ind i det her ;)

Men: hvad er præcis problemet?
Avatar billede safl Nybegynder
19. juni 2003 - 23:46 #5
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Luftens Helte//iCal 1.0//DA
BEGIN:VEVENT
UID
:11111111111111111111111111111111
USERID
:LOKALE
SUMMARY
:TEST
LOCATION
:
DESCRIPTION
:
DTSTART
:20030619T220000
DTEND
:20030619T221500
DTSTAMP
:20031906T222322Z
END:VEVENT
BEGIN:VEVENT
UID
:22222222222222222222222222222222
USERID
:LOKALE
SUMMARY
:TEST
LOCATION
:
DESCRIPTION
:
DTSTART
:20030619T220000
DTEND
:20030619T221500
DTSTAMP
:20031906T222322Z
END:VEVENT
BEGIN:VEVENT
UID
:3333333333333333333333333333333
USERID
:LOKALE
SUMMARY
:TEST
LOCATION
:
DESCRIPTION
:
DTSTART
:20030619T220000
DTEND
:20030619T221500
DTSTAMP
:20031906T222322Z
END:VEVENT
BEGIN:VEVENT
UID
:44444444444444444444444444444444
USERID
:LOKALE
SUMMARY
:TEST
LOCATION
:
DESCRIPTION
:
DTSTART
:20030619T220000
DTEND
:20030619T221500
DTSTAMP
:20031906T222322Z
END:VEVENT
END:VCALENDAR


Når man sætter $uid = 111... så tager den kun den, den skal.
Sætter man $uid = 222..., 333...., 444... tager alle VEVENTS fra toppen ned til og med den givne VEVENT.
Avatar billede erikjacobsen Ekspert
20. juni 2003 - 00:19 #6
Det er jo rigtig nok. Prøv lige:

preg_replace('/(BEGIN:VEVENT.*?END:VEVENT)/se',$preg_match('/$uid/s','\\1')?'':'\\1'", $ics_file_content);
Avatar billede erikjacobsen Ekspert
20. juni 2003 - 00:20 #7
ups:

preg_replace('/(BEGIN:VEVENT.*?END:VEVENT)/se',"preg_match('/$uid/s','\\1')?'':'\\1'", $ics_file_content);
Avatar billede safl Nybegynder
20. juni 2003 - 00:24 #8
damn du er skarp! - nice syntax! - 200points til lørdags kyllingen ;)
Avatar billede erikjacobsen Ekspert
20. juni 2003 - 00:32 #9
Ok, det virker, og ser også ret godt ud ... :)

Men det er måske ikke det mest effektive i verden. Hvad er din problemstilling?
Hvis du læser en fil, laver én sletning, og skriver den ud igen, så er det
nok ikke så galt, den løsning her.

Skal du lave flere ting ved dataene i filen, bør man nok læse den
ind i fx en hash indexeret af UID. Så manipulerer man effektivt, og
kan skrive den ud igen.
Avatar billede safl Nybegynder
20. juni 2003 - 00:44 #10
Det skal bare bruges til at slette en EVENT. Så det gør ikke det store at den ikke er mega effektiv.
Og det er også kun en midlertidig videreudvikling af phpicalender.sf.net så man kan tilføje/redigere/slette event istedet for blot at se dem. Og siden resten af deres kode stinker mega voldtsomt så er det helt fint :)
Desuden skal koden køres på en intranet server der har et load på 0.0 så det er kun godt at den får lidt at lave ;)
Avatar billede erikjacobsen Ekspert
21. juni 2003 - 20:21 #11
Nåh, men skal vi så ikke finde en løsning, der kører 100 gange så langsomt?
Der er så synd at se en 'puter, der ikke har noget at lave ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester