Loops: Regex mit Positionsangabe

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

  • Loops: Regex mit Positionsangabe

    hi

    ich schreibe gerade so eine art parser für loops (schleifen). darin soll eben ein markierter bereich wiederholt werden, z. b.:
    Code:
    Das ist ein... {LOOP<}Text {>LOOP}
    "Text" soll 10 mal wiederholt werden. Da könnte aber auch etwas anderes stehen. es geht eben darum, das der parser die stelle erkennt und den loops ausführt. der parser soll den text von anfang bis ende "durchparsen". es gibt nämlich noch ein paar andere sachen im parser, für die die reihenfolge wichtig ist. also einfach den text ersetzen wäre nicht sinnvoll.

    am besten ist es, wenn der parser den muster mit einem regulären ausdruck erkennt ({LOOP<}Text {>LOOP}) und dann die entsprechende position im text zurückgibt, also z. b. "der text {LOOP<}Text {>LOOP} bedindet sich bei zeichen 10 bis zeichen 29".

    wie kann ich sowas in php machen?

  • #2
    z.B. so wenn du eine einfache Variante möchtest:
    preg_replace("/\{LOOP<\}(.*?)\{>LOOP\}/","$1$1$1$1$1$1$1$1$1$1",$string)

    Das wäre das einfache Ersetzen. Warum ist das in deinem Fall nicht sinnvoll?
    Wenn du eine andere Variante möchtest wäre es gut, wenn du dein Problem ein bisschen genauer beschreiben würdest.

    Kommentar


    • #3
      ich vereinfache das beispiel mal. also der parser macht folgendes. aus dem z. B.:
      Code:
      Text 1 Text 1 Text 1 Text 1 Text 1 [LOOP]Wiederholung 1 Wiederholung 1 [VAR:titel] Wiederholung 1[/LOOP]Text 2 Text 2
      soll das werden:
      PHP-Code:
      Array
      (
          [
      TEXT_1] => Text 1 Text 1 Text 1 Text 1 Text 1 
          
      [LOOP_1] => Array
              (
                  [
      TEXT_2] => Wiederholung 1 Wiederholung 1
                  
      [VAR_1] => titel
                  
      [TEXT_3] => Wiederholung 1
              
      )

          [
      TEXT_4] => Text 2 Text 2

      das template wird eingelesen und die strukturen (loop, var) sollen nacheinander in das array eingespeist werden.

      ich denke das geht am besten mit einem regex. damit die strukturen aber in der richtigen reihenfolge im array stehen, muss der parser den string ja von anfang bis ende "durchparsen", damit die verschachtelungen ([LOOP]..[/LOOP]) berücksichtigt werden.

      wie kann ich sowas machen?

      Kommentar


      • #4
        Re: Loops: Regex mit Positionsangabe

        Original geschrieben von chri91
        am besten ist es, wenn der parser den muster mit einem regulären ausdruck erkennt ({LOOP<}Text {>LOOP}) und dann die entsprechende position im text zurückgibt, also z. b. "der text {LOOP<}Text {>LOOP} bedindet sich bei zeichen 10 bis zeichen 29".

        wie kann ich sowas in php machen?
        positionen kanst du mit strpos() herausfinden.
        per regex würde ich preg_match_all() bevorzugen

        Kommentar

        Lädt...
        X