我想要做的是使用preg替换来替换字符串中的匹配,使用不同的替换,我想知道是否有人知道这是否可以在PHP中或至少可以通过某种方式实现。例如,一个字符串有两个匹配项,那么这些匹配项将被两个不同的变量替换。我想要的是每个的替换是一个唯一的ID,我无法弄清楚这可能是如何工作或如果PHP甚至可以做到这一点。例如,如果匹配为'a'并且有一个句子,'对某个人微笑那么一个'a'将是唯一ID 98aksd00而另一个将是09alkj08。我正从数据库中检索我的评论,以便在
中进行preg替换while ($row=mysql_fetch_assoc($query)){
//preg replace
如果有人能对此提供任何见解,我将非常感激
答案 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';
}