2014-03-25 55 views
0

我试图更新我的代码,但我坚持在此代码行。转换:“preg_replace” - >“preg_replace_callback”

如何继续将其转换为preg_replace_callback?

$buffer = preg_replace("#§([a-z0-9-_]+)\.?([a-z0-9-_]+)?#ie","\$templ->\\1(\\2)",$buffer); 
+0

您好!你能告诉我一个你想在这里做什么的例子吗?转换非常简单,如果您可以更多地了解字符串的外观以及在完成后期望它的外观,我可以为您提供一个代码示例。 – Quixrick

回答

1

这里是转换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>. 
+0

谢谢,我会尽快尝试,并给予适当的回应! – mlv

+0

它工作正常,并感谢您的详细解释!很爱我的朋友! <3 – mlv

相关问题