000
27.06.2005, 12:58
scus
|
Moin, ich hab ein Problem: Ich will diesen String
Günter:23;Horst:45;Option:(0:545;lat:3423;lon:96);Ro:RORORO
in folgendes zerlegen
Günter:23 Horst:45 Option:(0:545;lat:3423;lon:96) Ro:RORORO
Das eigentliche Problem ist, dass "explode(';', $str);" das hier liefert (was auch logisch ist):
Günter:23 Horst:45 Option:(0:545 lat:3423 lon:96) Ro:RORORO
Daher dachte ich an "preg_split()" nur bekomme ich keinen passenden Ausdruck hin:
<?php preg_split("/[^\(];[^\)]/", $str); ?>
klappt nicht, da (a) nur sowas "(;)" aber nicht sowas "(bla;bla)" ausgeschlossen würde und (b) sowas ausgegeben wird:
Günter:2 orst:4 ption:(0:54 at:342 on:96 o:RORORO
Ich hoffe ihr versteht mein Problem und könnt mir helfen...
--
sincères amitiés scus -- Tand, Tand ist das Gebilde von Menschenhand
Dieser Beitrag wurde am 27.06.2005 um 12:59 von scus bearbeitet.
|
|
Profil || Suche
|
001
27.06.2005, 16:18
CN
|
wie wärs wenn du mal früher ansetzt und das format "optimierst" (also einfach mal die ; in den klammern zu sonstwas änderst)
--
|
|
Profil || Suche
|
002
27.06.2005, 18:16
scus
|
Da ist das Problem, dass in der Klammer noch eine Klammer sein könnte, in der ich die ";" zu noch etwas anderem ändern müsste und so weiter...
--
sincères amitiés scus -- Tand, Tand ist das Gebilde von Menschenhand
|
|
Profil || Suche
|
003
27.06.2005, 18:32
theDon
|
Dann bleibt dir nichts anderes uebrig, als einen kompletten Parser zu schreiben.
--
\o tanz den naziprau! o/
And more than ever, I hope to never fall, Where enough is not the same it was before
|
|
Profil || Suche
|
004
28.06.2005, 18:04
Chronial
|
Für mehrere Klammerebenen: Du machst ein preg_match_all mit /[;()]/ und offset capturing. Dann gehst du einfach durch die matches, und wenn da ein "(" ist, erhöhst du $level um eins, bei ")" erniedrigst du um eines, und wenn es ";" ist und level==0, fügst du den substring von $lastSemicolon bis zum offset des matches als neues Element an $output an.
Für eine Klammerebene Du machst ein preg_replace mit callback (entweder mit "e" modifier oder mit preg_replace_callback), bei dem du alle /\(.*?\)/ durch einen ungewöhnlichen, ausreichend langen String ersetzt, und den vorherigen wert zu einem array hinzufügst. Dann ein schönes split(), und danach einfach ein array_walk über das ergebnis, bei dem du Werte aus dem temp-array wieder einsetzt.
Verständlich? :)
--
"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren
|
|
Profil || Suche
|