Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] preg - jedes Match mit anderem Wert ersetzen (https://www.delphipraxis.net/85086-%5Bphp%5D-preg-jedes-match-mit-anderem-wert-ersetzen.html)

Meflin 25. Jan 2007 19:24


[PHP] preg - jedes Match mit anderem Wert ersetzen
 
Moin!

Ich stehe gerade vor folgendem Problem: ich habe einen Text, in dem ich jedes Vorkommen einer Regular Expression mit einem jeweils individuellen Wert ersetzen will (in meinem Fall GUIDS).

Dazu habe ich das versucht:
Code:
      if ($this->ReplacementMethod == self::REPLACE_ALL_UIDS) {
         $this->FileStream = preg_replace_callback(
            $this->ReplacementMask,
            create_function(
               '',
               'return MyClass::NewGUID();'
            ),
            $this->FileStream
         );
      }
wobei MyClass::NewGUID(); eine static public funciton ist. Es scheint jedoch so als würde nicht bei jedem MAtch die Callback-Funktion aufgerufen, wie ich das eigentlich erwartet hatte, denn alle Matches werden mit dem gleichen Wert ersetzt :(

Woran liegt das, bzw wie kann ich es lösen?


Meflin 26. Jan 2007 17:52

Re: [PHP] preg - jedes Match mit anderem Wert ersetzen
 
*push*


Meflin 28. Jan 2007 17:31

Re: [PHP] preg - jedes Match mit anderem Wert ersetzen
 
*Nochmal push :( *

omata 28. Jan 2007 18:24

Re: [PHP] preg - jedes Match mit anderem Wert ersetzen
 
Hallo Melfin,

die Callbackroutine wird nur einmal aufgerufen und man erhält dann im Übergabeparameter ein Array mit den Treffern. Du must deine Ersetzung auf eine begrenzen und dann solange Ersetzen, bis nichts mehr ersetzt wurde. Dann kannst du auch die Callbackroutine weglassen...

Code:
  $i = 0;
  do {
    $this->FileStream = preg_replace(
      $this->ReplacementMask,
      MyClass::NewGUID(),
      $this->FileStream,
      1,
      $i
    );
  } while($i > 0);
Gruss
Thorsten

Meflin 28. Jan 2007 18:30

Re: [PHP] preg - jedes Match mit anderem Wert ersetzen
 
Zitat:

Zitat von omata
Hallo Melfin,

Nein, der andere

Zitat:

die Callbackroutine wird nur einmal aufgerufen und man erhält dann im Übergabeparameter ein Array mit den Treffern.
Achso - irgendwie finde ich das doof, wozu braucht man dann ein Callback :gruebel: Aber nachdem das nicht geklappt hat hatte ich das schon vermutet...

Dass preg_replace einen Index-Parameter hat wusste ich irgendwie auch nicht :stupid: Das macht die Sache einfacher :mrgreen:

Merci!



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz