Возможно ли, чтобы preg заменил уникальные переменные на строку?

Я хочу использовать замену 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'; }