我对用Javascript编写的娱乐功能有问题,以使其在php中工作。我认为我真的很亲密,但不太了解php语法。 所以我在JS中有类似的东西:
function convertStr(str, id) {
const regexExpression = new RegExp('PR|PD|DD|DPD|DP_AVG', 'g');
return str.replace(regexExpression, match => match + id);
}
所以我尝试在php中做同样的事情,我有这个:
$reg = "/PR|PD|DD|DPD|DP_AVG\g/";
$result = preg_replace($reg, ??, $str)
所以我不知道在“ ??”中放什么,因为据我在JS中了解,这是我的匹配箭头函数match => match + id
,但是我无法在PHP中执行。
有人可以帮忙吗?
最好
自拍
答案 0 :(得分:2)
您不应在PHP preg函数中使用全局修饰符,而是有控制此行为的特定函数或参数。例如。 preg_replace
默认替换输入字符串中的所有匹配项。
使用
function convertStr($str, $id) {
$regexExpression = '~PR|PD|DD|DPD|DP_AVG~';
return preg_replace($regexExpression, '$0' . $id, $str);
}
在这里
~PR|PD|DD|DPD|DP_AVG~
是一个正则表达式,它与多个子字符串替代匹配(请注意,~
符号用作正则表达式定界符,在JS中,您只能在正则表达式文字中使用/
符号)$0
表示整个匹配值(与JS正则表达式中的$&
相同),并且$id
只是附加到该值之后。因此,在JS版本中,我建议使用
return str.replace(regexExpression, "$&" + id);
答案 1 :(得分:2)
您还可以使用preg_replace_callback()
:http://php.net/manual/en/function.preg-replace-callback.php
此方法将接受一个函数作为其第二个参数,该函数与JS版本相同。
$str = "...";
$id = 0;
preg_replace_callback("Your regex expression", function($match) {
return $match[0] + $id;
}, $str);