如何将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
答案 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)
。然后不需要创建第二个函数。