У меня проблема с функцией воссоздания, написанной на 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.
Кто-нибудь может помочь?
Лучший,
Петр
Я имею в виду, что мое регулярное выражение работает нормально. Мне нужно помочь получить соответствующее значение в php и добавить к нему идентификатор.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не должны использовать глобальный модификатор в preg-функциях PHP, существуют специальные функции или аргументы, которые управляют этим поведением. Например. 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);
Спасибо, большое, приму, как только разрешат.
@PiotrWadycki Piotrze, я рекомендую переключиться на шаблон замены строк в коде JS, поскольку он считается наиболее эффективным. Стрелочная функция действительно классная и очень мощная, но здесь такой необходимости нет.
Вы также можете использовать 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);
Убрать
\g, заменить на'$0' . $id