Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_match ( all ) Problemlösung

Einklappen

Neue Werbung 2019

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

  • preg_match ( all ) Problemlösung

    Hallo!

    Folgendes Problem:
    ich möchte aus einer Datei folgende Muster, {igendeintext} herausfiltern und in ein Array speichern.
    Dabei habe ich folgenden Ausdruck verwendet:
    Code:
    '[\{.*\}]'
    .

    Beispiel:

    Code:
    $string  = "blablabla{key1}blablabla"; 
    preg_match_all('[\{.*\}]', $string,  $regs );
    print_r( $regs );
    das ergibt als Ergebnis:

    Code:
    Array
    (
        [0] => Array
            (
                [0] => {key1}
            )
    
    )
    soweit alles richtig, aber wenn der String so aussieht:
    Code:
    $string  = "blablabla{key1}blablabla{key2}";
    preg_match_all('[\{.*\}]', $string,  $regs );
    print_r( $regs );

    kommt dieses Ergebnis:
    Code:
    Array
    (
        [0] => Array
            (
                [0] => {key1}blablabla{key2}
            )
    
    )
    Das heißt, wenn ein 2.Match gefunden wird, werden keine weiteren
    Arrayelemente mit diesem hinzugefügt, sondern das Element erweitert
    und nicht relevante Terxtabschnitte übernommen.

    Kann mir Jemand sagen was ich da falsch mache ? - ist vielleicht meine Regex nicht ok ?
    hab schon so manches versucht, aber bin auf keiner Lösung gestoßen.

    Vielen Dank!

    Marco


  • #2
    Dafür brauchst du den Modifier U (ungreedy). Außerdem würde ich auch noch den Modifier s aufnehmen, damit auch mehrzeilige Texte erkannt werden.

    Kommentar


    • #3
      '#\{(.+)\}#sU'

      oder

      '#\{(.*?)\}#s'

      preg_match_all('[\{.*\}]', $string, $regs );
      Die []-Klammern sind für einzelne Zeichen dar, um eine Zeichenklasse anzulegen.
      Ansonsten runde Klammern benutzen, also ( ) ...

      Kommentar


      • #4
        Zitat von CIX88
        Die []-Klammern sind für einzelne Zeichen dar, um eine Zeichenklasse anzulegen.
        viterbese benutzt die eckigen Klammern hier ja nur als Delimiter.

        Kommentar


        • #5
          Vielen Dank euch Beiden, es hat funktioniert.
          Beste Grüße

          Marco

          Kommentar

          Lädt...
          X