geloescht_JesterDay Geschrieben 7. Juli 2006 Geschrieben 7. Juli 2006 Hallo, ich suche eine RegExp, mit der ich aus einem String Name1 : 'Value1', Name2 : 2, Name3 : [ 1, '2', 3 ], Name4 : 'false', Name5 : { Sub1 : 'Subval1', Sub2 : 2, Sub3 : [ 4, '5', 6 ], Sub4 : 'false' } alle Name:Value Paare rausbekommen kann. Also Name1 : 'Value1' wäre so ein Paar. Aber auch Name3 : [1, '2', 3] oder aber Name5 : { Sub1 : 'Subval1', Sub2 : 2, Sub3 : [ 4, '5', 6 ], Sub4 : 'false' } Das ganze mit php und ich denke preg_match_all mit der richtigen RegExp sollte mir da helfen können, oder? Ok, Name5 ist dann schon wieder ein Extremfall. Wenn ich eine Möglichkeit hätte, alle anderen Werte zu bekommen würde mir das erstmal schon reichen. Die die sowas kennen: Ja, ich will hier in PHP einen JSON-String auswerten und verarbeiten. Und nein, fertige C-Libraries sind keine Lösung. Auch die JSON_PHP Klassen helfen mir nicht, da die erstens nur ab PHP5 funktionieren und zweitens das auch nicht hinbekommen EDIT: Eine bessere Überschrift ist mir nicht eingefallen
etreu Geschrieben 8. Juli 2006 Geschrieben 8. Juli 2006 Du nimmst einfach 3 Muster für die 3 Möglichkeiten. $patternName = "Name\d+"; $patternSimpleNumber = "/(($patternName)\d+)),? /"; $patternSimpleString = "/(($patternName):'(.+?)'),? /"; $patternList = "/(($patternName)\[((\d+),)+\])),? /"; $patternComplex = "(($patternName):\{(.+?)\})"; // mit dem Wert den RegEx rekursiv anwenden [/PHP] Man das Ganze natürlich auch verkürzen, indem man lookahead-Expressions benutzt. Aber so (vom Prinzip her) sollte es funktionieren. Prüfen tust du mit Hilfe der Funktion preg_match_all.
geloescht_JesterDay Geschrieben 10. Juli 2006 Autor Geschrieben 10. Juli 2006 Name\d war nur ein Beispiel. Namen können alles sein, was den Namenskonventionen entspricht... Hab jetzt mal folgende 3 RegEx: // Name : Object preg_match_all('/([a-z0-9]+) : ({.*})/i', input, $match) // Name : Array preg_match_all('/([a-z0-9]+) : (\\[.*\])/iU', input, $match) // Name : Value preg_match_all('/([a-z0-9]+) : (\'?[a-z0-9]+'?)/i', input, $match) Damit kann ich sie ja immerhin schonmal entsprechend verkleinern. Allerdings passt "Name : Value" auch bei den Objekten (also Name5 im Beispiel). Gibt es eine Möglichkeit da eine Verneinung mit in die RegEx zu basteln? Also sowas wie: /([a-z0-9]+) : [B](!{ )[/B](\'?[a-z0-9]+'?)/i' Wenn ich das so mache findet er gar nichts mehr.
etreu Geschrieben 10. Juli 2006 Geschrieben 10. Juli 2006 Verneinung sieht in etwa so aus (alles ausser n): $notN = "/[^n]+/"; [/PHP]
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden