Jonny 5: REGEX Ical

Beitrag lesen

Hi Hektor!

Das sieht ziemlich wirr aus ;)

Die Indexe im Ausgabe-Array geben für normal die Reihenfolge der nicht durch ?: maskierten Klammerungen im Suchmuster wieder. Durch zB (?: könnte man einen Teil von der Ausgabe ausschließen. [0] ist immer der Teil, der auf das komplette Suchmuster zutrifft, [1] der dem ersten geklammerten Teil des Suchmusters entspricht usw...

Ein Doppelpunkt muss durch \ escaped werden, wenn er nicht als Metazeichen interpretiert werden soll.

Doch jetzt wird es komisch und für mich nicht mehr nachvollziehbar.

Auch wohl für die regex engine nicht mehr.

Im Prinzip möchtest du ja nur alles was zwischen
BEGIN:VEVENT und END:VEVENT zu finden ist.

Davon möglichst wenig, da die Quantoren standardmäßig gierig sind und so zB alles fressen würden, bis zum bitteren Ende, sollte man den . verwendet.

Durch ein ? nach dem . oder den modifier U für ungreedy kann man aber der engine mitteilen, dass sie eben möglichst bescheiden sein soll.

Außerdem möchtest du, dass der Punkt auch auf das Zeilende zutrifft, also wird auch der s modifier benötigt.

Es wäre also ein ganz einfaches Muster:
/BEGIN:VEVENT(.*)END:VEVENT/sU

Die gewünschten Brocken sollten dann im $array[1] zu finden sein, da [0] ja alles enthält, was dem kompletten Suchmuster entspricht.

Viel Erfolg!
Jonny 5