Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_replace, mixed Suchmuster, mixed Ersatz problem?

Einklappen

Neue Werbung 2019

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

  • preg_replace, mixed Suchmuster, mixed Ersatz problem?

    Hi,

    hab mich durch die Threads gewühlt, komm nicht weiter...
    Ich will in meinem code drei beliebige Zahlen innerhalb eckiger Klammern [234] mit [++$zeilen_nr] austauschen
    Bei diesem Code wird keine Übereinstimmung gefunden:
    Code:
    $pattern = '/$quelle20041022\[*\]/i';
    $replace = '$quelle20041022[++$zeilen_nr]';
    $s = preg_replace ($pattern, $replace, $zeichenkette);
    Muß ich den Ersatz auch escapen? (komm ich aber auch nicht weiter)
    Beschreibung: mixed preg_replace ( mixed Suchmuster, mixed Ersatz, mixed Zeichenkette [, int Limit])
    http://de3.php.net/manual/de/function.preg-replace.php

    Und so gibt es diese Fehlermeldung:
    Code:
    $pattern = '/$quelle20041022\[???\]/i';
    $replace = '$quelle20041022[++$zeilen_nr]';
    $s = preg_replace ($pattern, $replace, $zeichenkette);
    Warning: Compilation failed: nothing to repeat at offset 19 in \regex_2.php on line 39

    Kann mir jemand helfen?
    Merci, twinx

  • #2
    Hallo,

    ich glaube, Dein Problem ist (vorerst) viel einfacher
    Du schreibst
    Code:
    $pattern = '/$quelle20041022\[*\]/i';
    , ich schlage aber
    Code:
    $pattern = "/$quelle20041022\[*\]/i";
    vor.
    Cheers, Marco

    Kommentar


    • #3
      Zitat von marsch
      Du schreibst
      Code:
      $pattern = '/$quelle20041022\[*\]/i';
      , ich schlage aber
      Code:
      $pattern = "/$quelle20041022\[*\]/i";
      vor.
      Hi marsch :wink: ,
      also einfache ' Anführungszeichen gegen " doppelte Anführungszeichen austauschen, hab ich gemacht.
      Code:
      $pattern = "/$quelle20041022\[*\]/i";
      $replace = "$quelle20041022\[++\$zeilen_nr]";
      $ergebnis = preg_replace ($pattern, $replace, $zeichenkette);
      // print (sprintf ("%s\n", $s));
      echo $ergebnis;
      ... aber da tut sich nichts, $zeichenkette wird unverändert ausgegeben. Nur wenn ich bei [++\$zeilen_nr] das Dollarzeichen nicht escape, dann schimpft PHP über eine Undefined variable.
      Das bringt es auch nicht:
      Code:
      $replace = "$quelle20041022\[\+\+\$zeilen_nr]";
      Wegen den Anführungszeichen hatte ich mich hier an einem Bsp. von Dir orientiert:
      Code:
      <?php
      
      $s = 'das hier interessiert keinen... >"AppDirectory"="c:\test"< hier geht der String weiter...';
      $pattern = '/\"AppDirectory\"\s*=\s*\"c:\\\\test\"/i';
      $replace = '"AppDirectory"="c:\test\test"';
      $s = preg_replace ($pattern, $replace, $s);
      print (sprintf ("%s\n", $s));
      
      ?>
      http://www.phpfriend.de/forum/viewto...=164493#164493

      Kommentar


      • #4
        Hallo,

        ist "$quelle20041022" eine Variable, oder muss das $-Zeichen auch matchen?
        Cheers, Marco

        Kommentar


        • #5
          Hi,
          Zitat von marsch
          ist "$quelle20041022" eine Variable, oder muss das $-Zeichen auch matchen?
          "$quelle20041022 ist eine Variable!
          Aber so könnte ich ja auch suchen, wäre dann weniger kompliziert.
          Code:
          $pattern = "/20041022\[*\]/i";
          $replace = "20041022\[\+\+\$zeilen_nr]";
          $ergebnis = preg_replace ($pattern, $replace, $zeichenkette);
          echo $ergebnis;
          aber es funktioniert auch nicht.

          Ich habe hunderte von diesen Zeilen:
          Code:
          echo "zeile: 2. settle 107.5:" . $quelle20041022[137] . "
          \n";
          echo "zeile: 2. traded 107.5:" . $quelle20041022[138] . "
          \n";
          echo "zeile: 2. interest 107.5:" . $quelle20041022[139] . "
          \n";
          und als Anfänger, hab ich von Hand schön brav hochnummeriert $quelle20041022[139], bis ich auf die Idee kam, ich könnte ja auch sowas schreiben:
          Code:
          echo "zeile: 1.($zeilen_nr) traded 107:" . $quelle20041022[++$zeilen_nr] . "
          \n";
          echo "zeile: 1.($zeilen_nr) interest 107:" . $quelle20041022[++$zeilen_nr] . "
          \n";
          ich könnte diesen Quelltext natürlich mit zB. UltraEdit suchen und ersetzen aber leider krieg ich es da auch nicht hin und nun prob ich es in PHP...

          Kommentar


          • #6
            Aha, Du willst Deinen Quelltext ändern, also ist z.B. $quelle20041022[137] keine Variable buw. Wert, sondern $quelle20041022 ist Teil des Strings?
            Cheers, Marco

            Kommentar

            Lädt...
            X