preg_match_all gibt nicht alle Ergebnisse zurück

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

  • preg_match_all gibt nicht alle Ergebnisse zurück

    Ich würde gerne aus einem String alle Befehle auslesen, die folgerndermaßen aufgbaut sind:

    {var[:wert[:wert[etc...]]]}

    also ein Ausdruck beginnend mit { dann ein wort und dann eine unbestimmte Anzahl von Werten. Das Ende ist wieder mit } gekennzeichnet. (Beispiel siehe $string).

    Der Code soll das dann auslesen und in einem Array speichern, das folgerndermaßen aufgabaut sein sollte (bzw. so ähnlich):

    Code:
    array(3) {
      [0]=>
      array(3) {
        [0]=>
        string(29) "{var:wert1:wert2:wert3:wert4}"
        [1]=>
        string(3) "var"
        [2]=>
        string(5) "wert1"
        [3]=>
        string(6) "wert2"
        [4]=>
        string(6) "wert3"
        [5]=>
        string(6) "wert4"
      }
      [1]=>
      array(3) {
        [0]=>
        string(20) "{var2:wert21:wert22}"
        [1]=>
        string(4) "var2"
        [2]=>
        string(6) "wert21"
        [2]=>
        string(6) "wert22"
      }
      [2]=>
      array(2) {
        [0]=>
        string(5) "{var}"
        [1]=>
        string(3) "var"
      }
    }
    Das Script:
    PHP-Code:
    <?php
    $string 
    "asdf{var:wert1:wert2:wert3:wert4}asdfasdf{var2:wert21:wert22}sdfsdf{var}";
    $suchmuster '/{(\w*)(:(\w*))*}/';
    preg_match_all($suchmuster,$string,$fundstellen,PREG_SET_ORDER);
    var_dump($fundstellen);
    ?>
    momentan bekomme ich aber nur diese Ausgabe:

    Code:
    array(3) {
      [0]=>
      array(3) {
        [0]=>
        string(29) "{var:wert1:wert2:wert3:wert4}"
        [1]=>
        string(3) "var"
        [2]=>
        string(6) ":wert4"
      }
      [1]=>
      array(3) {
        [0]=>
        string(20) "{var2:wert21:wert22}"
        [1]=>
        string(4) "var2"
        [2]=>
        string(7) ":wert22"
      }
      [2]=>
      array(2) {
        [0]=>
        string(5) "{var}"
        [1]=>
        string(3) "var"
      }
    }
    Was muss ich ändern?
    Danke
    nougad

  • #2
    dein beispiel macht bei mir nichts.
    aber was du vorhast wirst du mit preg_match allein nicht hinbekommen.

    ich würde es so machen. erstmal alle zwischen den {} herausholen z.b.:
    Code:
    /\{(\w[\w:]+\w)}/U
    und dann den string mit explode() an den : trennen.

    Kommentar


    • #3
      Wunderbar, danke für die schnelle Hilfe!

      Werde es so machen, dachte nur es gibt evtl. eine elegantere Lösung mit nur einer RegEx... Aber gut.

      Wäre es sinnvoll den RegEx koplett weg zu lassen? Und statt dessen lieber komplett auf string-funktionen zurück zu greifen?

      Danke
      nougad

      Kommentar

      Lädt...
      X