Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
27.06.2005, 12:58
scus



Moin,
ich hab ein Problem: Ich will diesen String
Quellcode:Günter:23;Horst:45;Option:(0:545;lat:3423;lon:96);Ro:RORORO
in folgendes zerlegen
Quellcode: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):
Quellcode: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-Quellcode:<?php
preg_split
("/[^\(];[^\)]/"$str);
?>
klappt nicht, da (a) nur sowas "(;)" aber nicht sowas "(bla;bla)" ausgeschlossen würde und (b) sowas ausgegeben wird:
Quellcode: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.
zum Seitenanfang zum Seitenende 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)

--

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende Profil || Suche