Я хочу использовать замену preg для замены совпадений внутри строки с меняющейся заменой, и мне было интересно, знает ли кто-нибудь, возможно ли это в php или, по крайней мере, достижимо каким-либо образом. Например, строка имеет два совпадения, затем эти соответствия будут заменены двумя разными переменными. Я хочу, чтобы замены для каждого были уникальным идентификатором, и я не могу понять, как это может работать, или если php может это сделать. Например, если совпадение «a» и есть предложение, «положите улыбку на человека», тогда один «a» будет уникальным id 98aksd00, а другой будет 09alkj08. Я извлекаю свои комментарии из базы данных, поэтому замена preg происходит внутри
while ($row=mysql_fetch_assoc($query)){ //preg replace
Если бы кто-нибудь мог понять это, я был бы очень признателен
Вы можете использовать preg_replace_callback()
, который вызовет вызов функции с каждым соответствием:
$out = preg_replace_callback('!\bword\b!', 'replace_word', $in); $id = 1; function replace_word($matches) { global $id; return $id++; }
Изменить: чтобы ответить на вопрос, этот фрагмент кода:
$message = preg_replace_callback("'\[test\](.*?)\[/test\]'", 'replace_word' ,$message); function replace_word() { return 'test'; }
Проблема здесь в том, что вы используете строку с двойными кавычками, поэтому вам нужно сбежать \
. Здесь мало причин использовать строки с двойными кавычками. Это также делает синтаксис более запутанным, так что:
$message = preg_replace_callback('!\[test\](.*?)\[/test\]!', 'replace_word' ,$message); function replace_word() { return 'test'; }