2012-09-25 67 views
0

我想创建一个钩子,这样,当下面的文字中发现:PHP preg_replace函数计算不工作

level,2 

它与$skill_level * $n替换它,用逗号之后被数$n

以下是我有:

$skill_level = 2; 

$row['s_effect'] = "Long string of text that contains level,2." 

preg_replace("/level,$n/",$skill_level * $n,$row['s_effect']) 

我得到的结果是:

Long string of text that contains 02. 

我想要的结果:

Long string of text that contains 4. 

出于某种原因,它似乎是计算"$skill_level * $n" (2 * 2)不工作。

回答

3

您需要使用preg_replace_callback

$skill_level = 2; 
$text = "Long string of text that contains level,2."; 

$ret = preg_replace_callback("/level,(\d+)/", function ($matches) use ($skill_level) { 
    return $matches[1] * $skill_level; 
}, $text); 
+0

只是出于兴趣,是有特别的原因您使用的是向后看断言,而不是只使用一个存储组? –

+0

这是关闭我想我得到︰ 长字符串包含级别,4。 应该是:长字符串包含4的文本。 – user1625155

+0

为了使这个解决方案工作,当调用$ ret时,我使用了preg_replace(“/ level,/”,“”,$ ret) – user1625155