2010-08-15 13 views
0

J'ai un texte simple qui est en cours d'analyse avec PHP. Dans ce texte, je l'utilise parfois la syntaxe suivante:PHP regex remplacer l'expression avec la fonction exécuter de sa part

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

Maintenant, ce que je dois, est, par regex, pour remplacer cette {$video:path/to/my/video.mp4} avec la chaîne retournée de ceci: $someObject->processVideoSource('path/to/my/video.mp4');. Donc, vous voyez, j'ai besoin de trouver ces expressions, filtrer la source de {$video: et }, puis exécutez une fonction sur cette source, qui remplace l'expression entière. Comment puis-je faire cela avec preg_replace ou des trucs comme ça?

S'il vous plaît Gardez à l'esprit que j'ai différentes instances de cette expression dans le fichier texte que je suis en train d'analyser et que chaque vidéo a sa propre source. Et excusez le titre mal choisi ^^

Merci beaucoup à l'avance!

Répondre

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

SO me apprend tellement ... –

+0

+1 mais je pense que vous avez besoin pour échapper à la $ et peut-être le {} – SoapBox

+0

Je ne pense pas que "{}" a besoin d'être échappé, juste le "$". Au moins, le tester [ici] (http://www.spaweditor.com/scripts/regex/index.php) sans échapper au "{}" a bien fonctionné (mais encore une fois, il faut échapper le $!). – Stephen

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

Alors:

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