我试图更新我的代码,但我坚持在此代码行。转换:“preg_replace” - >“preg_replace_callback”
如何继续将其转换为preg_replace_callback?
$buffer = preg_replace("#§([a-z0-9-_]+)\.?([a-z0-9-_]+)?#ie","\$templ->\\1(\\2)",$buffer);
我试图更新我的代码,但我坚持在此代码行。转换:“preg_replace” - >“preg_replace_callback”
如何继续将其转换为preg_replace_callback?
$buffer = preg_replace("#§([a-z0-9-_]+)\.?([a-z0-9-_]+)?#ie","\$templ->\\1(\\2)",$buffer);
这里是转换preg_replace
(与e
改性剂)preg_replace_callback
的过程。您可以创建一个函数,对所有找到的匹配进行操作。通常情况下,这非常简单,但是对于您的情况,它会稍微复杂一点,因为该函数会返回对象的值。为了适应这种情况,您可以使用匿名函数(一个没有名字的函数)并将USE
关键字与您的对象关联。这可以内联完成,但为了清楚起见,我已将其作为自己的变量。
看看下面的完整代码的这一部分:
$callback_function = function($m) use ($templ) {
我创建了一个名为callback_function
变量将在preg_replace_callback
功能使用。此功能将自动以变量$m
的形式输入每个匹配项。因此,在函数中,您可以使用$m[1]
和$m[2]
来访问它匹配的表达式的各个部分。另请注意,我已将$templ
变量与USE
关键字相关联,因此$templ
将在该函数中可用。
希望这是有道理的。总之,这里是完整的代码:
<?php
// SET THE TEXT OF THE BUFFER STRING
$buffer = 'There are a bunch of §guns.roses growing along the side of the §guns.road.';
// THIS IS JUST A SAMPLE CLASS SINCE I DO NOT KNOW WHAT YOUR CLASS REALLY LOOKS LIKE
class Test {
// FUNCTION NAMED 'guns' WITH A SPACE FOR A PARAMETER
public function guns($info) {
return '<b>BLUE '.strtoupper($info).'</b>';
}
}
// INSTANTIATE A NEW 'Test' CLASS
$templ = new Test();
// THIS IS THE FUNCTION THAT YOUR CALLBACK WILL USE
// NOTICE THAT IT IS AN ANONYMOUS FUNCTION (THERE IS NO FUNCTION NAME)
$callback_function = function($m) use ($templ) {
return $templ->$m[1]($m[2]);
};
// THIS USES PREG_REPLACE_CALLBACK TO SUBSTITUTE OUT THE MATCHED TEXT WITH THE CALLBACK FUNCTION
$buffer = preg_replace_callback('/§([a-z0-9-_]+)\.?([a-z0-9-_]+)?/i', $callback_function, $buffer);
// PRINT OUT THE FINAL VERSION OF THE STRING
print $buffer;
此输出以下:
There are a bunch of <b>BLUE ROSES</b> growing along the side of the <b>BLUE ROAD</b>.
您好!你能告诉我一个你想在这里做什么的例子吗?转换非常简单,如果您可以更多地了解字符串的外观以及在完成后期望它的外观,我可以为您提供一个代码示例。 – Quixrick