Воссоздать функцию сопоставления регулярных выражений js в 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. Кто-нибудь может помочь?

Лучший,

Петр

Убрать \g, заменить на '$0' . $id

Wiktor Stribiżew 05.03.2019 20:06

Я имею в виду, что мое регулярное выражение работает нормально. Мне нужно помочь получить соответствующее значение в php и добавить к нему идентификатор.

piotrruss 05.03.2019 20:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
110
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы не должны использовать глобальный модификатор в 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);

Спасибо, большое, приму, как только разрешат.

piotrruss 05.03.2019 20:12

@PiotrWadycki Piotrze, я рекомендую переключиться на шаблон замены строк в коде JS, поскольку он считается наиболее эффективным. Стрелочная функция действительно классная и очень мощная, но здесь такой необходимости нет.

Wiktor Stribiżew 05.03.2019 20:15

Вы также можете использовать 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);

Другие вопросы по теме