Preg_replace with array replacements

前端 未结 4 1184
说谎
说谎 2020-12-03 07:50
$string = \":abc and :def have apples.\";
$replacements = array(\'Mary\', \'Jane\');

should become:

Mary and Jane have apples.


        
相关标签:
4条回答
  • 2020-12-03 08:26

    You could use preg_replace_callback with a callback that consumes your replacements one after the other:

    $string = ":abc and :def have apples.";
    $replacements = array('Mary', 'Jane');
    echo preg_replace_callback('/:\w+/', function($matches) use (&$replacements) {
        return array_shift($replacements);
    }, $string);
    

    Output:

    Mary and Jane have apples.
    
    0 讨论(0)
  • 2020-12-03 08:31

    For a Multiple and Full array replacement by Associative Key you can use this to match your regex pattern:

       $words=array("_saudation_"=>"Hello", "_animal_"=>"cat", "_animal_sound_"=>"MEooow");
       $source=" _saudation_! My Animal is a _animal_ and it says _animal_sound_ ... _animal_sound_ ,  _no_match_";
    
    
      function translate_arrays($source,$words){
        return (preg_replace_callback("/\b_(\w*)_\b/u", function($match) use ($words) {    if(isset($words[$match[0]])){ return ($words[$match[0]]); }else{ return($match[0]); } },  $source));
      }
    
    
        echo translate_arrays($source,$words);
        //returns:  Hello! My Animal is a cat and it says MEooow ... MEooow ,  _no_match_
    

    *Notice, thats although "_no_match_" lacks translation, it will match during regex, but preserve its key. And keys can repeat many times.

    0 讨论(0)
  • 2020-12-03 08:43

    Try this

    $to_replace = array(':abc', ':def', ':ghi');
    $replace_with = array('Marry', 'Jane', 'Bob');
    
    $string = ":abc and :def have apples, but :ghi doesn't";
    
    $string = strtr($string, array_combine($to_replace, $replace_with));
    echo $string;
    

    here is result: http://sandbox.onlinephpfunctions.com/code/7a4c5b00f68ec40fdb35ce189d26446e3a2501c2

    0 讨论(0)
  • 2020-12-03 08:46
    $string = ":abc and :def have apples.";
    $replacements = array('Mary', 'Jane');
    
    echo preg_replace("/:\\w+/e", 'array_shift($replacements)', $string);
    

    Output:

    Mary and Jane have apples.
    
    0 讨论(0)
提交回复
热议问题