2014-03-25 57 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

相關問題