RegExp und Rückgabewerte

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

  • RegExp und Rückgabewerte

    Hallo PHP-Gemeinde,

    ich hänge an einem RegExp fest. Das Ziel ist eigentlich ganz einfach:

    Alle Vorkommen von <br /> innerhalb von [PRE] und [/PRE] sollen durch \n\r ersetzt werden. Außerdem soll auch das [PRE] und [/PRE] durch HTML-Code ersetzt werden. Aber leider bekomme ich das nicht hin. Folgendes habe ich versucht:

    PHP-Code:
    $vari=preg_replace("#\[PRE\](.*?)(\<br /\>)?(.*?)\[/PRE\]#si","<pre>$1\n\r$3</pre>",$vari);

    $vari=preg_replace("#\[PRE\](.*?)(\<br /\>?)(.*?)\[/PRE\]#si","<pre>$1\n\r$3</pre>",$vari);

    $vari=preg_replace("#\[PRE\]((.*)(\<br /\>)(.*)?)\[/PRE\]#si","<pre>$1\n\r$3</pre>",$vari);

    $vari=preg_replace("#\[PRE\]((.*)(\<br /\>)(.*))?\[/PRE\]#si","<pre>$1\n\r$3</pre>",$vari); 
    Alles leider ohne Erfolg. Was ich nicht ganz verstehe: Als Rückgabewerte erhalte ich von $1 oder in einer andere Syntax von \1 absolut gar nichts.

    Falls mir jemand helfen kann, würde ich mich freuen, wenn er / sie mir das auch erklären würde *G*. Sonst muss ich wieder nerven, wenn ich etwas ändern will


    Und dann habe ich noch eine weitere Frage, für die ich keinen neuen Thread eröffnen will, weil es nicht so wichtig ist:

    Gibt es eine Möglichkeit, die Rückgabewerte aus einer Ersetzung in ein Array zu schreiben? Also z. B. folgender String:

    "Ich bin [X]text1[/X] und ich bin [X]text2[/X] und ich [X]text3[/X] usw."

    Nun sollen alle Passagen, die zwischen [X] und [/X] stehen, in einem Array abgelegt werden. Zugleich sollen Platzhalter in den String eingefügt werden. Das Ergebnis wäre dann z. B.:

    $arr=(1 => "text1", 2 => "text2", 3 => "text3")

    und der Ergebnisstring: "Ich bin SPA1 und ich bin SPA2 und ich SPA3 usw."

    So könnte ich nun z. B. den String durch diverse RegExp schicken, ohne dass meine von [X] und [/X] eingegrenzten Textstellen beeinflusst werden. Anschließend könnte ich dann wieder die SPAs durch Werte aus dem Array ersetzen, mir sprintf oder preg_replace.

    Aber diese Rückgabewerte kann man anscheinend nur mit preg_match in ein Array führen; zumindest habe ich keine andere Möglichkeit gefunden.

    Ich bedanke mich schon im Vorraus,

    DasD

  • #2
    preg_match_all
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Ich wüsste nicht, wie mir preg_match_all hier helfen sollte.

      Kommentar


      • #4
        Ich wüsste nicht, wie mir preg_match_all hier helfen sollte.
        sicherlich bezogen auf deine zweite frage ... preg_replace und preg_match_all sind doch zumindest ähnlich, finden tun sie beide bei gleichem regexp das gleiche, nur das preg_replace alle treffer ersetzt, match_all alle zurückgibt.

        zu deinen ersten punkt:
        Code:
          $text = '
            [PRE]
              dingens<br />dingens2<br />dingens3
              <br />dingens<br />dingens2<br />
              dingens3
            [/PRE]
          ';
          $reg_exp = array(
            '#\[PRE\](.*)\[/PRE\]#isU',
            '#<br />#'
          );
          $replace = array(
            '<pre>\1</pre>',
            "\r\n"
          );
          
          echo preg_replace($reg_exp, $replace, $text);
        btw: kennst du zufällig auch das E und das M?
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar

        Lädt...
        X