2015-02-12 61 views
1

我有一个字符串。将数据输入回preg_match_all

$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); 

后,我有那些2个修改的变量,我想的是能得到我的初始字符串看起来像下面这样的方式......

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'; 

很抱歉,如果这是很难理解的,但任何帮助会,如何这将有可能是巨大的。

干杯

回答

0

我会建议使用preg_replace_callback()要做到这一点,而不是。通过使用回调,您可以将任何函数传递给它或直接在回调中修改返回值。

下面是一个示例实现:

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

echo $url; 
+0

这正是我之后。干杯 – derpyderp 2015-02-12 01:14:18