2010-08-15 81 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);