Mazze: mit preg_replace nacheinander verscheidene werte

Hallo zusammen,

preg_replace erlaubt leider folgendes nicht:

------------

$zeichenkette = 'XXX und XXX wollen XXX';

$suchmuster = 'XXX';

$ersetzungen[0] = 'Peter';
$ersetzungen[1] = 'Gabi';
$ersetzungen[2] = 'Kuchen';

echo preg_replace($suchmuster, $ersetzungen, $zeichenkette);

-------------

da $ersetzungen ein array ist und $suchmuster ein string. Kennt jemand eine einfache Lösung, ohne dass ich sowas umständliches wie

$suchmuster[0] = 'XXX';
$suchmuster[1] = 'XXX';
$suchmuster[2] = 'XXX';

angeben muss?

Vielen Dank für die Hilfe!

  1. Hallo Mazze.

    preg_replace erlaubt leider folgendes nicht:


    $zeichenkette = 'XXX und XXX wollen XXX';

    $suchmuster = 'XXX';

    $ersetzungen[0] = 'Peter';
    $ersetzungen[1] = 'Gabi';
    $ersetzungen[2] = 'Kuchen';

    echo preg_replace($suchmuster, $ersetzungen, $zeichenkette);

    Mein Vorschlag:

    $zeichenkette = 'XXX und XXX wollen XXX';  
    $suchmuster = 'XXX';  
    $ersetzungen = array('Peter', 'Gabi', 'Kuchen');  
      
    echo '"' . $zeichenkette . '"' . "\n";  
      
    for ($i = 0, $start = 0;  
         ($start = strpos($zeichenkette, $suchmuster, $start)) !== false;  
         ++$i, ++$start) {  
      
      $zeichenkette = substr_replace($zeichenkette,  
                                     $ersetzungen[$i],  
                                     $start, strlen($suchmuster));  
    }  
      
    echo '"' . $zeichenkette . '"';
    

    Einen schönen Samstag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
  2. Die sauberste Möglichkeit wäre wohl eine Callback-Funktion mittels preg_replace_callback anzuwenden.
    Grüße.