是否可以将唯一变量preg替换为字符串?

时间:2010-04-12 01:38:57

标签: php

我想要做的是使用preg替换来替换字符串中的匹配,使用不同的替换,我想知道是否有人知道这是否可以在PHP中或至少可以通过某种方式实现。例如,一个字符串有两个匹配项,那么这些匹配项将被两个不同的变量替换。我想要的是每个的替换是一个唯一的ID,我无法弄清楚这可能是如何工作或如果PHP甚至可以做到这一点。例如,如果匹配为'a'并且有一个句子,'对某个人微笑那么一个'a'将是唯一ID 98aksd00而另一个将是09alkj08。我正从数据库中检索我的评论,以便在

中进行preg替换
while ($row=mysql_fetch_assoc($query)){
//preg replace


如果有人能对此提供任何见解,我将非常感激

1 个答案:

答案 0 :(得分:4)

您可以使用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';
}