andi_b: preg_replace macht nicht was ich will

'n aamd zusammen.
ich habe mir hier eine klasse geschrieben, die gekennzeichnete links in einem text (aus db) später in echte links wandeln soll. dafür habe ich ein preg_replace mit /e genommen. die richtigen stellen werden auch gefunden, aber:

  • der counter zählt nicht mit
  • bei jeglichen nicht-wort-zeichen gibt es einen:

Parse error: parse error, unexpected '[' in e:\eigene\_web\hu\_include\model\Pregger.class.php(14) : regexp code on line 1

Fatal error: Failed evaluating code: Link_1-[4 in e:\eigene\_web\hu\_include\model\Pregger.class.php on line 14

hier mal der relevante teil der klasse:

function findArticleReferences($inputArticle){
  $returnArray = array();

$search = "/([<)([1-9>[0-9]{0,5})(]])/e";
  $returnArray = preg_replace($search, $this->privateLinkSetter('\2'), $inputArticle);
  return $returnArray;
 }

function privateLinkSetter($link){
  ++$this->counter;
  return "Link_" . $this->counter . "-[" . $link;
 }
}

warum wird die rückgabe (der ersetzte teil) nochmal von dem pregger bearbeitet?
wie soll ich das denn machen?

bin echt ratlos...

danke, andi

  1. Hi!

    Wie sagt man da so schön? Eine Runde Mitleid! Oooooooooooooooohhhhh!!
    Helfen kann ich da so direkt auch nicht.
    Kann da vielleicht aber mal noch ein paar LInks raussuchen.

    Bye, Max

    1. Hallo,

      Wie sagt man da so schön? Eine Runde Mitleid! Oooooooooooooooohhhhh!!
      Helfen kann ich da so direkt auch nicht.

      Geh bitte sterben! Leise!

      Grüsse
      Iwemti

  2. Huhu andi_b

    (Zur Info, das Code-Beispiel auf das ich mich beziehe ist leider in einem anderen Thred (die übliche Doppelpostingproblematik))
    [pref:t=71533&m=411827]

    function findArticleReferences($inputArticle){
      $returnArray = array();

    wieso ist das ein Array ...

    $search = "/([<)([1-9>[0-9]{0,5})(]])/";
      $returnArray = preg_replace($search,$this->privateLinkSetter('\2'), $inputArticle);

    ... wenn hier ein String zugewiesen wird?

    return $returnArray;
     }

    function privateLinkSetter($link){
      ++$this->counter;
      return "Link_[" . $link . "]:" . $this->counter;
     }

    geht alles wunderbar, ABER die funktion 'privateLinkSetter' wird nur einmal _vor_ der ausführung des preg_replace aufgerufen.

    so ist es ja auch richtig.

    resultierendes problem: der counter ist überall gleich.

    gibt es hierzu einen trick, [...]?

    In Deinem ersten Posting warst Du eigentlich auf dem "richtigeren"
    Weg mit dem /e -Modifier.

    probier mal folgendes

    function findArticleReferences($inputArticle)
     {
      $s = '';
      $search = "/([<)([1-9>[0-9]{0,5})(]])/e";
      $s = preg_replace($search, "$this->privateLinkSetter('\2')", $inputArticle);
      return $s;
     }

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. (Zur Info, das Code-Beispiel auf das ich mich beziehe ist leider in einem anderen Thred (die übliche Doppelpostingproblematik))
      [pref:t=71533&m=411827]

      probier mal folgendes

      function findArticleReferences($inputArticle)
      {
        $s = '';
        $search = "/([<)([1-9>[0-9]{0,5})(]])/e";
        $s = preg_replace($search, "$this->privateLinkSetter('\2')", $inputArticle);
        return $s;
      }

      alter falter - du bist gut mann ;) es funktioniert so und leider weiss ich zwar noch nicht ganz wieso, aber das okmmt noch...

      vielen vielen dank!
      andi