String aufsplitten - preg_match_all

refl3x

Grünschnabel
Guten Abend die Damen und Herren der PHP Welt,

Folgendes Problem:

Ich hab einen String z.B.:

Lorem ipsum: dolor sit amet [1:2] Ipsum Lorem sit dolor [3:4] dolor Ipsum lorem sit [5:6]

Ich will hier folgendes aufgesplittet haben:

Text, Zahl1, Zahl2
Das würde heißen wenn man jetzt den oben genannten als Beispiel nimmt:

Erster Eintrag:
Text = Lorem ispum: dolor sit amet
Zahl1 = 1
Zahl2= 1

Zweiter Eintrag
Text = Ipsum Lorem sit dolor
Zahl1 = 2
Zahl2= 3


Mit folgendem Code, kann ich das realisieren, allerdings schleicht sich ein Fehler ein.

Code:
$pattern = '!([^\[\d:\d\]]*)\[(\d+):(\d+)\]!is';
$result = preg_match_all($pattern, $subject, $subpattern);

Nach jedem Doppelpunkt, splittet er den String.
Das heißt folgendes: Wenn ein Doppelpunkt, wie im Beispielstring oben mitten im Text vorkommt, splittet er ihn direkt.
Ich will aber nur, dass er bei einem Doppelpunkt splitte, wenn dieser zwischen [1:2] den beiden Zahlen in den eckigen Klammern steht

Wie genau löse ich das Problem?

Ich hoffe ihr habt das Problem verstanden und könnt mit da weiterhelfen.

Liebe Grüße
refl3x
 
Um noch kurz zu Erläutern, woran es lag:
Code:
[^\[\d:\d\]]
Das ist kein Suchmuster(wie am Ende des Ausdrucks), sondern eine negierte Zeichenklasse.

Durch diese wird alles gefunden, welches keines der Zeichen dort drinnen beinhaltet(also Ziffern, Doppelpunkt und eckige Klammern).
 
Zurück