我試圖更新我的代碼,但我堅持在此代碼行。轉換:「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