Javascript 在php中重新创建js正则表达式匹配函数

Javascript 在php中重新创建js正则表达式匹配函数,javascript,php,replace,preg-replace,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

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

最好的


Piotr

您不应该在PHP preg函数中使用全局修饰符,有特定的函数或参数控制此行为。例如,默认情况下,preg_replace替换输入字符串中的所有匹配项

使用

这里,

~PR | PD | DD | DPD | DP|u AVG~是一个匹配多个子字符串的正则表达式。请注意,~符号用作正则表达式分隔符,在JS中,您只能在正则表达式文字符号中使用/ 在替换中,$0表示与JS regex中的$&相同的整个匹配值,而$id只是附加到该值之后。 所以,在JS版本中,我建议使用

return str.replace(regexExpression, "$&" + id);

您不应该在PHP preg函数中使用全局修饰符,有一些特定的函数或参数控制此行为。例如,默认情况下,preg_replace替换输入字符串中的所有匹配项

使用

这里,

~PR | PD | DD | DPD | DP|u AVG~是一个匹配多个子字符串的正则表达式。请注意,~符号用作正则表达式分隔符,在JS中,您只能在正则表达式文字符号中使用/ 在替换中,$0表示与JS regex中的$&相同的整个匹配值,而$id只是附加到该值之后。 所以,在JS版本中,我建议使用

return str.replace(regexExpression, "$&" + id);
您还可以使用preg_replace_回调:

此方法将接受一个函数作为其第二个参数,该参数与JS版本相同

$str = "...";
$id = 0;
preg_replace_callback("Your regex expression", function($match) {
    return $match[0] + $id;
}, $str);
您还可以使用preg_replace_回调:

此方法将接受一个函数作为其第二个参数,该参数与JS版本相同

$str = "...";
$id = 0;
preg_replace_callback("Your regex expression", function($match) {
    return $match[0] + $id;
}, $str);

删除\g,替换为“$0”$我的意思是我的正则表达式很好用。我需要帮助获取php中的匹配值并向其添加id。删除\g,替换为“$0”$我的意思是我的正则表达式很好用。我需要帮助获取php中的匹配值并向其添加id。非常感谢,一旦允许,我将尽快接受。@PiotrWadycki Piotrze,我建议切换到JS代码中的字符串替换模式,因为它被认为是最有效的。arrow函数很酷,确实非常强大,但这里没有这种必要。非常感谢,我会尽快接受它。@PiotrWadycki Piotrze,我建议切换到JS代码中的字符串替换模式,因为它被认为是最有效的。箭头功能很酷,确实非常强大,但这里没有这种必要。