在php

时间:2019-03-05 19:05:15

标签: javascript php replace preg-replace

我对用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中执行。 有人可以帮忙吗?

最好

自拍

2 个答案:

答案 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);