gpt4 book ai didi

php - 如何使用带有 'e' 修饰符的 preg_replace() 传递参数?

转载 作者:行者123 更新时间:2023-12-04 07:00:20 27 4
gpt4 key购买 nike

我有一个关于 preg_replace() 函数的问题。我将它与 'e' 修饰符一起使用。这是代码片段:

$batchId = 2345;
$code = preg_replace("/[A-Za-z]{2,4}[\d\_]{1,5}[\.YRCc]{0,4}[\#\&\@\^]{0,2}/e",
'translate_indicator(\'$0\', {$batchId})', $code);

我想访问 $batchId内部变量 translate_indicator($code, $batch=false)功能。不幸的是,上面的例子不能正常工作: $batch 在 var_dump() 中是不可见的( bool(false) 结果是 translate_indicator() ) .

可能,我在替换代码中有语法错误。或者,也许不可能用 preg_replace() 传递变量?

更新前两个答案。

感谢您的回答,但您的建议没有帮助。此外,我已经尝试过双 qoutes 而不是单 qoutes。我刚刚简化了代码来测试将参数传递给函数的可能性:
$code = preg_replace("/[A-Za-z]{2,4}[\d\_]{1,5}[\.YRCc]{0,4}[\#\&\@\^]{0,2}/e",
"translate_indicator('$0', 12)", $code);

我还删除了 translate_indicator() 中 $batch 的默认值.结果:
Warning: Missing argument 2 for translate_indicator()

所以我认为使用这种方法传递参数是不可能的。:(

最佳答案

$batchId = 2345;
$code = 'AA1#';
$code = preg_replace(
"/[A-Za-z]{2,4}[\d\_]{1,5}[\.YRCc]{0,4}[\#\&\@\^]{0,2}/e",
"translate_indicator('\$0', $batchId)", /* if $batchId can be a string use 'batchId' */
$code);

function translate_indicator($s, $batchId) {
echo "translate_indicator($s, $batchId) invoked\n";
}

版画 translate_indicator(AA1#, 2345) invoked .
您也可以使用 preg_replace_callback和一个类/一个对象
class Foo {
public $batchId = 2345;
public function translate_indicator($m) {
echo "batchId=$this->batchId . $m[0]\n";
}
}

$code = 'AA1#';
$foo = new Foo;
$code = preg_replace_callback(
'/[A-Za-z]{2,4}[\d\_]{1,5}[\.YRCc]{0,4}[\#\&\@\^]{0,2}/',
array($foo, 'translate_indicator'),
$code
);

从 php 5.3 开始。您也可以使用 anonymous function + closure “传递”附加参数。
$code = 'AA1#';
$batchId = 2345;
$code = preg_replace_callback(
'/[A-Za-z]{2,4}[\d\_]{1,5}[\.YRCc]{0,4}[\#\&\@\^]{0,2}/',
function($m) use ($batchId) {
echo "batchid=$batchId . code=$m[0]\n";
},
$code
);

关于php - 如何使用带有 'e' 修饰符的 preg_replace() 传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com