• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Benutzerdefinierte Strings

Dsimon24

Mitglied
Hallo zusammen,

ich hoffe, die Überschrift verwirrt nicht - ich habe folgendes vor:

Angenommen ich habe einen String:
PHP:
$string = ''Da haben wir mal einen String von hier, bei schönem Wetter, bis hier!';

Jetzt möchte ich nur den Bereich von 'von' bis 'bis' -
also: 'hier, bei schönem Wetter,' erhalten und in eine neue Variable speichern.

Okay, blödes Beispiel, aber geht, denke ich.
Wie kann ich sowas realisieren?

Die Strings starten und enden jeweils mit dem gleichen Wort
(bspw. ' von' & 'bis') haben aber jeweils andere Inhalte.

VG, David
 
Hallo zusammen,

ich hoffe, die Überschrift verwirrt nicht - ich habe folgendes vor:

Angenommen ich habe einen String:
PHP:
$string = ''Da haben wir mal einen String von hier, bei schönem Wetter, bis hier!';

Jetzt möchte ich nur den Bereich von 'von' bis 'bis' -
also: 'hier, bei schönem Wetter,' erhalten und in eine neue Variable speichern.

Okay, blödes Beispiel, aber geht, denke ich.
Wie kann ich sowas realisieren?

Die Strings starten und enden jeweils mit dem gleichen Wort
(bspw. ' von' & 'bis') haben aber jeweils andere Inhalte.

VG, David

PHP:
preg_match('/von\s(.*?)\sbis/', $string, $matches);
var_dump($matches);
 
Vielen Dank, das sieht schonmal gut aus.
Ich frag jetzt nicht, wofür die ganzen 'Zeichen'
stehen, ich nimm´s einfach mal so hin :-D

Aber wo wir quasi beim Thema sind...

Jetzt möchte ich ein Array, welches ich via print_r ausgebe,
in einem String speichern. Es handelt sich bei dem Array wohl
um ein Objekt, da ich folgende Meldung bekomme: 'Catchable
fatal error
: Object of class CalDAVObject could not be conver-
ted to stringin /var/www/htdocs/smart1/html/smhr/calics/
icsTOvar.php
on line 50'

Wie mach ich das?
Via cast 'echo (String)$dasArray[0]' geht´s nämlich nicht.
 
Du könntest das Array in einer for-Schleife ausgeben:
PHP:
for($i = 0; $i < count($dasArray); $i++) {
    echo $dasArray[$i]
}
 
Aber so wie ich das sehe ist es ja dann trotzdem noch ein Objekt:
'Catchable fatal error: Object of class CalDAVObject could not be converted
to string in /var/www/htdocs/smart1/html/smhr/calics/icsTOvar.php on line 65'

Wichtig ist, dass ich es in einen String umgewandelt bekomme,
sodass ich mit dem String dann anschließend auch 'weiterarbeiten' kann.
 
Aber so wie ich das sehe ist es ja dann trotzdem noch ein Objekt:
'Catchable fatal error: Object of class CalDAVObject could not be converted
to string in /var/www/htdocs/smart1/html/smhr/calics/icsTOvar.php on line 65'

Wichtig ist, dass ich es in einen String umgewandelt bekomme,
sodass ich mit dem String dann anschließend auch 'weiterarbeiten' kann.

Du verwechselst da irgendetwas.
Dieses Objekt hat nichts mit einem Array zu tun:
https://github.com/wvrzel/simpleCalDAV/blob/master/CalDAVObject.php

Vielleicht suchst du ja nach
PHP:
var_dump($xyz->getData())
 
Jetzt bin ich raus...

Also, mit folgendem rufe ich die Events aus dem Kalender ab:
PHP:
$events = $client->getEvents('20160628T000000Z', '20160628T233000Z');

Dann erhalte ich bei zwei Kalendereinträgen in diesem Zeitraum diese in $events[0]
und in $events[1] zurück. Wenn ich diese Arrays über print_r ausgeben lasse, sehe
ich diese als ICS.

Meine Idee war, diese in Strings umzuwandeln.

Oder gibt es jetzt eine bessere Möglichkeit, an die einzelnen
Attribute (bspw. Summary, Location, etc.) ranzukommen?
 
Jetzt bin ich raus...

Also, mit folgendem rufe ich die Events aus dem Kalender ab:
PHP:
$events = $client->getEvents('20160628T000000Z', '20160628T233000Z');

Dann erhalte ich bei zwei Kalendereinträgen in diesem Zeitraum diese in $events[0]
und in $events[1] zurück. Wenn ich diese Arrays über print_r ausgeben lasse, sehe
ich diese als ICS.

Meine Idee war, diese in Strings umzuwandeln.

Oder gibt es jetzt eine bessere Möglichkeit, an die einzelnen
Attribute (bspw. Summary, Location, etc.) ranzukommen?

Was erhältst du bei var_dump($events)?
 
Bei 'var_dump($events[1])' erhalte ich:

object(CalDAVObject)#7 (3) { ["href":"CalDAVObject":private]=> string(111) "http://..." ["data":"CalDAVObject":private]=> string(688) "BEGIN:VCALENDAR X-LOTUS-CHARSET:UTF-8 VERSION:2.0 PRODID:ZMS-Berlin BEGIN:VTIMEZONE TZID:Europe/Berlin X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE METHOD:REQUEST BEGIN:VEVENT UID:0.13164400 1467187773 CLASS:pUBLIC DTSTART;TZID=Europe/Berlin:20160628T200000Z DTEND;TZID=Europe/Berlin:20160628T220000Z LOCATION:auf dem Klo SUMMARY:Test 3 DESCRIPTION:Die Babys sitten END:VEVENT END:VCALENDAR" ["etag":"CalDAVObject":private]=> string(32) "b9477a26e27613a631d3b33bde45b789" }


Bei 'var_dump($events)' erhalte ich:

array(2) { [0]=> object(CalDAVObject)#6 (3) { ["href":"CalDAVObject":private]=> string(111) "http://..." ["data":"CalDAVObject":private]=> string(688) "BEGIN:VCALENDAR X-LOTUS-CHARSET:UTF-8 VERSION:2.0 PRODID:ZMS-Berlin BEGIN:VTIMEZONE TZID:Europe/Berlin X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE METHOD:REQUEST BEGIN:VEVENT UID:0.61674500 1467187709 CLASS:pUBLIC DTSTART;TZID=Europe/Berlin:20160628T160000Z DTEND;TZID=Europe/Berlin:20160628T180000Z LOCATION:auf dem Klo SUMMARY:Test 2 DESCRIPTION:Die Babys sitten END:VEVENT END:VCALENDAR" ["etag":"CalDAVObject":private]=> string(32) "d60eeac1f7f07799ad233df2c6196335" } [1]=> object(CalDAVObject)#7 (3) { ["href":"CalDAVObject":private]=> string(111) "http://..." ["data":"CalDAVObject":private]=> string(688) "BEGIN:VCALENDAR X-LOTUS-CHARSET:UTF-8 VERSION:2.0 PRODID:ZMS-Berlin BEGIN:VTIMEZONE TZID:Europe/Berlin X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE METHOD:REQUEST BEGIN:VEVENT UID:0.13164400 1467187773 CLASS:pUBLIC DTSTART;TZID=Europe/Berlin:20160628T200000Z DTEND;TZID=Europe/Berlin:20160628T220000Z LOCATION:auf dem Klo SUMMARY:Test 3 DESCRIPTION:Die Babys sitten END:VEVENT END:VCALENDAR" ["etag":"CalDAVObject":private]=> string(32) "b9477a26e27613a631d3b33bde45b789" } }

Okay, was die Smileys jetzt da solle, weiß ich leider nicht :-D
 
Top! Da hätt´ich ja auch drauf kommen können - funktioniert!

Vielen Dank!

Wo wir jetzt einmal dabei sind...
Gibt es eine einfache Möglichkeit, die Inhalte
(bspw. Summary, Location, etc.) ranzukommen?

Oder ist es da am sinnvollsten mit preg_match zu arbeiten?
 
Top! Da hätt´ich ja auch drauf kommen können - funktioniert!

Vielen Dank!

Wo wir jetzt einmal dabei sind...
Gibt es eine einfache Möglichkeit, die Inhalte
(bspw. Summary, Location, etc.) ranzukommen?

Oder ist es da am sinnvollsten mit preg_match zu arbeiten?

Du kannst dir ja einen ics-Parser suchen.
Die arbeiten natürlich auch mit preg_match aber nehmen dir wahrscheinlich einiges an Arbeit ab.
 
Ich hab´s mal selbst versucht, da ich dachte, sind nur 5 prag-maches.

Funktioniert auch - bis auf eine Ausgabe vorerst...

Mein String (in der Variable $derTest):
BEGIN:VCALENDAR X-LOTUS-CHARSET:UTF-8 VERSION:2.0 PRODID:ZMS-Berlin BEGIN:VTIMEZONE TZID:Europe/Berlin X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE METHOD:REQUEST BEGIN:VEVENT UID:0.13164400 1467187773 CLASS:PUBLIC DTSTART;TZID=Europe/Berlin:20160628T200000Z DTEND;TZID=Europe/Berlin:20160628T220000Z LOCATION:zu Hause SUMMARY:Test 3 DESCRIPTION:Die Babys sitten END:VEVENT END:VCALENDAR

Meine 'preg-match':
PHP:
preg_match('/LOCATION:(.*?)SUMMARY/', $derTest, $matches4);
echo $matches4[1];

Zwischen 'Location' und 'Summary' steht ja 'zu Hause'.
Was mache ich falsch, dass der dies nicht ausgibt?
 
Ich hab´s mal selbst versucht, da ich dachte, sind nur 5 prag-maches.

Funktioniert auch - bis auf eine Ausgabe vorerst...

Mein String (in der Variable $derTest):


Meine 'preg-match':
PHP:
preg_match('/LOCATION:(.*?)SUMMARY/', $derTest, $matches4);
echo $matches4[1];

Zwischen 'Location' und 'Summary' steht ja 'zu Hause'.
Was mache ich falsch, dass der dies nicht ausgibt?

Nimm lieber einen Parser - das wird nicht das letzte Problem sein...
Code:
/LOCATION:(.*)/
 
Okay, dann werde ich doch mal nach einem Parser schauen.
Aber jetzt nur, dass ich deinen Code von oben verstehe...

Code:
/LOCATION:(.*)/
Warum hört der nach dem Inhalt von Location auf und gibt
mir nicht den String bis zum Ende des ICS-Strings zurück?
 
Macht er doch, also ich hab das mal bei einem Tester probiert

Link: https://regex101.com/r/oY7dU0/1


Du kannst auch folgendes verwenden
Code:
\sLOCATION:(.*?)SUMMARY

mit dem \s setzt du noch einen Leerschritt an erster Stelle. Weil wenn du das weg nimmst, dann gibt er dir ab X-LIC-LOCATION alles wieder.

Ich kann nur empfehlen, geh auf die Seite und teste es aus https://regex101.com/
 
Zuletzt bearbeitet:
Zurück
Oben