将数据输入preg_match_all

时间:2015-02-12 00:51:27

标签: php regex

我有一个字符串。

$url = 'http://alarms.internal/image?host=database1&srv=IO_Recieved&view=1&source=0&start={TSTAMP:NOW-2D}&end={TSTAMP:NOW}';

查看网址,我想从中获取一些通配符(大括号内的任何内容' {'),并对它们执行一些功能。因此我插入了一些正则表达式来将它们拉出来。

preg_match_all('/\{[^}]*\}/', $url, $result);

这将在数组中返回以下内容......

array(2) 
{ 
    [0]=> string(21) "{TSTAMP:NOW-2D}" 
    [1]=> string(18) "{TSTAMP:NOW}" 
}

这一切都很好,花花公子和大自然的糖果,但我很好奇我将如何将返回值插回到原始字符串中。例如,我可能会在下面运行一些代码......

function timeConversion($string) {
     ...
     ...

     return $time;

}

$result1 = $result[0][0];
$result2 = $result[0][1];

$time1 = timeConversion($result1);
$time2 = timeConversion($result2);

在我有了这两个修改过的变量之后,我想要一种能够让我的初始字符串看起来如下的方法......

echo $url;

返回......

$url = 'http://alarms.internal/image?host=database1&srv=IO_Recieved&view=1&source=0&start=TIME10-45-25DATE10-02-2015&end=TIME10-45-25DATE12-02-2015';

很抱歉,如果这很难理解,但对于如何做到这一点会有任何帮助。

干杯

1 个答案:

答案 0 :(得分:0)

我建议使用preg_replace_callback()代替这样做。通过使用回调,您可以将任何函数传递给它或直接在回调内修改返回值。

以下是一个示例实现:

$url = preg_replace_callback('~{[^}]*}~', 
     function($m) {
        return timeConversion($m[0]);
     }, $url);

echo $url;