2010-08-15 84 views
0

我有一個正在用PHP解析的簡單文本。在該文本,我有時會使用以下語法:PHP正則表達式替換表達式,其中包含函數運行

Here's the text... {$video:path/to/my/video.mp4} and here the text goes on. 

現在,我需要的是,藉助正則表達式,替換此{$video:path/to/my/video.mp4}與這個返回的字符串:$someObject->processVideoSource('path/to/my/video.mp4');。所以,你看,我需要找到這些表達式,過濾來自{$video:}的源,然後在該源上運行一個函數,該函數替換整個表達式。我如何用preg_replace或類似的東西來做到這一點?

請記住,我在解析的文本文件中有不同的表達式實例,每個視頻都有自己的源代碼。並且藉口嚴重挑選標題^^

非常感謝!

回答

2
preg_replace_callback('/{\\$video:(.+?)}/', 
    function ($matches) use ($someObject) { 
     return $someObject->processVideoSource($matches[1]); 
    }, $text); 
+0

SO教我這麼多... – 2010-08-15 13:16:38

+0

+1,但我認爲你需要躲避$和可能{} – SoapBox 2010-08-15 13:18:21

+0

我不認爲「{}」需要轉義,只是「$」。至少,在[{}(http://www.spaweditor.com/scripts/regex/index.php))測試它時,如果沒有轉義「{}」,那麼運行良好(但同樣必須避免$!)。 – Stephen 2010-08-15 13:29:08

0
preg_replace('/({\$[a-zA-Z]+:)|(})/', '', '{$video:path/to/my/video.mp4}'); 

所以:

$path = preg_replace('/({\$[a-zA-Z]+:)|(})/', '', '{$video:path/to/my/video.mp4}'); 
$someObject->processVideoSource($path);