如何在preg_replace中用c(xxx)替换c(xxx)?

时间:2013-07-25 08:32:22

标签: php regex preg-replace

如何将c(xxx)替换为c(xxx)中的preg_replace

在下面的代码中,我想将str c(xxx)替换为functioun c(xxx) 我没有得到我想要的正确结果。
我的代码出了什么问题?以及如何解决?
    

$c['GOOD']='very good';
$c['BOY']='jimmy';
function c($x){
    global $c;
    if(isset($c[$x])){
        return $c[$x];
    }
}

$str="hello c(GOOD) world c(BOY) ";
$str=preg_replace("@c\(([A-Z_\d]+)\)@",c('$1'),$str);
echo $str;  // --> hello  world

// how to get hello very good world jimmy

3 个答案:

答案 0 :(得分:3)

php.net: preg_replace_callback()

如果你看一下例子#2,那就是你要找的东西:)

function c($matches){
   print_r($matches)
}
$str = preg_replace_callback("@c\(([A-Z_\d]+)\)@", 'c', $str);

小旁注:我不知道你是否想要调用你的函数'c',但我建议使用明确的函数名来解释它们的作用

答案 1 :(得分:2)

尝试e修饰符http://php.net/manual/en/reference.pcre.pattern.modifiers.php

  

注意:自PHP 5.5.0起,此功能已被弃用。非常不鼓励依赖此功能。

<?php
  $str  = preg_replace( "/c\(([A-Z_\d]+)\)/e", 'c("$1")', $str );
?>

更好地使用preg_replace_callback

<?php
  $str  = preg_replace_callback( "/c\(([A-Z_\d]+)\)/", function( $m ) {
    return c( $m[1] );
  }, $str );
?>

答案 2 :(得分:0)

您可以将preg_replace_callback与Anonymous functions

一起使用
<?php
$c['GOOD']='very good';
$c['BOY']='jimmy';

$str="hello c(GOOD) world c(BOY) ";
  echo preg_replace_callback('@c\((.*?)\)@', function ($match) use ($c) { 
   if (isset($c[$match[1]])) return $c[$match[1]]; 
  }, 
  $str);
?>

此功能的优点是:它允许您传递第二个参数,请参阅use ($c)。然后不需要创建第二个函数。