PHP preg_替换计算不起作用
我正在尝试创建一个钩子,以便在文本中找到以下内容时:PHP preg_替换计算不起作用,php,Php,我正在尝试创建一个钩子,以便在文本中找到以下内容时: level,2 它将其替换为$skill\u 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
level,2
它将其替换为$skill\u 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.
我想要一个结果:
Long string of text that contains 02.
Long string of text that contains 4.
出于某种原因,
“$skill\u level*$n”(2*2)
的计算似乎不起作用。您需要使用preg\u replace\u回调
$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);
您需要使用
preg\u replace\u回调
$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);
出于兴趣,使用look-behind断言而不是仅仅使用内存组有什么特别的原因吗?我想我得到的是:包含级别4的长文本字符串。应该是:包含4的长文本字符串。为了使此解决方案起作用,在调用$ret时,我使用了preg_replace(“/level,/”,“,$ret)@user1625155我没有读到您的问题,以为您只想替换数字。更新了我的答案。谢谢,我真的很感激。只是出于兴趣,你为什么要使用look-behind断言而不是仅仅使用内存组?这很接近,我想我得到了:包含级别4的长文本字符串。应该是:包含4的长文本字符串。为了使此解决方案起作用,在调用$ret时,我使用了preg_replace(“/level,/”,“,$ret)@user1625155我没有读到您的问题,以为您只想替换数字。更新了我的答案。谢谢,我真的很感激。