Regulärer Ausdrück Hilfe ...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Regulärer Ausdrück Hilfe ...

    Hallo,

    ich benutze für meinen JSON Code fongenden regulären Ausdruck.


    PHP-Code:
    <?php 
    $finde 
    'content'
    $umwandle 'wwww'
    $id 'e2'
    $pattern '[B]/("id":\s*"'.$id.'",.*"'.$finde.'":\s*")(.*)(",(.*)\}{1})/iUs[/B]' 

    echo 
    preg_replace($pattern,'\1'.$umwandle.'\3',$json,1); 
    ?>

    für diesen JSON Code:
    PHP-Code:
    $json 

      "doctitle": "Test Dokument", 
      "date": "02.05.2007", 
      "locked": false, 
      "locktime": 1181258563, 
      "read": true, 
      "write": true, 
      "entry": [ 
        { 
           "id": "e1", 
           "title": "Test-Entry 1", 
           "content": "blabl ö äa ...", 
           "time": "02.05.2007", 
           "edittime": "02.05.2007", 
           "read": true, 
           "write": true, 
        }, 
        { 
           "id": "e2", 
           "title": "Test-Entry 2", 
           "content": "blabla ... <font style=\"font-size:16px\",>asd</font>", 
           "time": "02.05.2007", 
           "edittime": "02.05.2007", 
           "read": true, 
           "write": true, 
        }, 
        { 
           "id": "e3", 
           "title": "Test-Entry 3", 
           "content": "blabla ...", 
           "time": "02.05.2007", 
           "edittime": "02.05.2007", 
           "read": true, 
           "write": false, 
        } 
      ] 

    '


    mit diesem Code ändere ich den Inhald der Variable "content" unter bestimmten ID (z.B. "id": "e2"). Dieser regulärer Ausdruck ist gut aber nicht genug, und könnte ich nicht weiter kommen.


    Probleme:
    - wenn Inhalt von content z.B. "content": "vor \", nach", beinhaltet, wird Inhalt bis \ genommen und nach wird nicht als Inhalt definiert. Dafür habe ich zum regulären Ausdruck an der Stelle [^\\\] hinzugefügt /("id":\s*"'.$id.'",.*"'.$finde.'":\s*")(.*)[^\\\](",(.*)\}{1})/iUs. Dies ist besser also hier wird bis ", gesucht aber davor kann kein \ stehen. Aber dann das Problem ist wenn es z.B. 2 mal \\ steht.
    Jetzt wie kann ich so machen, dass es vor ", keine 1, 3, 5,... fache also gradzahlen von \ stehen soll??? Deswegen so, weil es 2, 4, 6 ... Stück ist dann neutralisiert sich selbst.

    - bei meinem reguleären Ausdruck findet es nur die Inhalte zwischen " und ",, und wenn es aber z.B. so eine boolsche Wert "read": true, oder so eine Zahl "time": 1234567889, ist.
    Wie kann mann es so machen, dass man die drei Weise mit dem gleichen Ausdruck bekommen kann.


    Danke!!!

  • #2
    Re: Regulärer Ausdrück Hilfe ...

    Fürs erste Problem würde ich eine negative lookbehind Assertion probieren
    und fürs zweite halt
    ([0-9]+|true|false)


    Es gibt übrigens auch vernünftige fertige JSON-Parser -> Google

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar

    Lädt...
    X