Iets uit een flinke string zien te filteren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Erik van Geene

Erik van Geene

06/08/2014 11:29:28
Quote Anchor link
Tis weer een tijd geleden dat ik met PCRE/preg-spul heb gewerkt, maar ik ben echt even de weg kwijt...

Ik heb een string welke uit een CalDAV connectie wordt opgehaald.

Nu moet ik slechts een aantal delen van deze string eruit zien te filteren op een effectieve en snelle manier, want er worden nogal wat strings uitgelezen.

Als voorbeeld wil ik uit deze string het gedeelte tussen SUMMARY: en UID: hebben
Zo zal er ook nog wel wat bij DESCRIPTION moeten worden gevist.
Als ik eenmaal de truck weet voor SUMMARY, is de rest niet zo moeilijk meer.

BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Webmail//NONSGML Calendar//EN BEGIN:VTIMEZONE TZID:Europe/Amsterdam BEGIN:DAYLIGHT DTSTART:20140330T030000Z RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=03 TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD DTSTART:20141026T020000Z RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTART;TZID=Europe/Amsterdam:20140528T080000 DTEND;TZID=Europe/Amsterdam:20140528T160000 DTSTAMP:20140805T134904Z SEQUENCE:1407246544 SUMMARY:Een afspraak UID:20140514T112204Z-6461@9da172b963ffe1ab BEGIN:VALARM ACTION:DISPLAY DESCRIPTION: Afspraak TRIGGER;VALUE=DURATION:-P2D END:VALARM END:VEVENT END:VCALENDAR

Met preg_replace en backticks kom ik er niet uit.
 
PHP hulp

PHP hulp

21/11/2024 14:06:27
 
- Ariën  -
Beheerder

- Ariën -

06/08/2014 11:38:49
Quote Anchor link
is een iCal-parser geen beter idee?
 
Erik van Geene

Erik van Geene

06/08/2014 11:49:17
Quote Anchor link
Geen idee in hoeverre iCal parser overweg kan met Baikal Card/caldav server.
De bedoeling is om met zo min mogelijk libs en overhead gewoon een kalender uit te lezen en dit te tonen op een website zonder fancy stuff.
 
Ivo P

Ivo P

06/08/2014 14:46:27
Quote Anchor link
ik zou denken aan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$aMatch
= array();

$b = preg_match('#SUMMARY:(.*)DESCRIPTION:#', $string, $aMatch);

?>


of komen er ook nog enters voor in de string in kwestie, of kan DESCRIPTION: meermaals voorkomen?
 
Erik van Geene

Erik van Geene

06/08/2014 15:00:26
Quote Anchor link
Nee, dit is prima zo! Ik weet al waar ik fout zat.
Dacht eerst aan strippen van de string, maar was vergeten dat je met preg_match je match uiteindelijk er zo uit kan krijgen.

Ik heb steeds de eerste in de reeks nodig, en anders pak ik hem wel met preg_match_all.
Top! Dank!
 
Ivo P

Ivo P

06/08/2014 15:02:20
Quote Anchor link
Als DESCRIPTION vaker voorkomt, dan zul je mogelijk het hele stuk tussen de eerste SUMMARY: en de laatste DESCRIPTION: vinden.
 
Erik van Geene

Erik van Geene

06/08/2014 16:13:13
Quote Anchor link
Was ff knoeien met de (.*) en het niet meenemen van de \n en zo, maar (\S*) en eindigen met /s maakt het nu volledig functionerend inclusief de uitzonderingen die er zijn in de Calendar data.
 
Willem vp

Willem vp

06/08/2014 17:37:06
Quote Anchor link
Ivo P op 06/08/2014 15:02:20:
Als DESCRIPTION vaker voorkomt, dan zul je mogelijk het hele stuk tussen de eerste SUMMARY: en de laatste DESCRIPTION: vinden.

Dat is te voorkomen door ungreedy te matchen:

$b = preg_match('#SUMMARY:(.*?)DESCRIPTION:#', $string, $aMatch);

Heeft als bijkomend voordeel dat het meestal ook een heel klein beetje sneller is, omdat de regex-parser minder hoeft te backtracken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.