如何在 preg_replace 中使用数组和正则表达式作为模式?

How to use an array and regex as pattern in preg_replace?

所以,我有一个 preg_replace 函数应该替换以下模式: 前面带有@字符的用户名。

我在一个名为 allMembers() 的多维数组中获取了用户名,并使用正则表达式将任何单词替换为 @ 字符及其周围的空格:

/\B@[a-z-]+\s/

但是如何通过preg_replace函数运行数组中包含的用户名呢?所以,只需一个替换多个模式。

$mentionPattern = "/\B@[ USERNAMES FROM ARRAY ALLMEMBERS HERE ]+\s/";                                
$mentionReplace = "<a class='userMention'>[=12=]</a>";
preg_replace($mentionPattern, $mentionReplace, $text);

示例:

我网站上的用户:John、Harry、Peter

每当有人添加 "bla bla @John bla bla" 之类的消息时,“@John”部分应替换为其他内容。因此,替换取决于 @ 和现有用户名(我在数组中拥有)的使用。

一个好方法是使用preg_replace_callback。优点是您可以避免使用交替缓慢的模式(特别是如果您有很多用户):

$result = preg_replace_callback('~@(\w+)~', function ($m) use ($usernames) {
    return (in_array($usernames, $m[1])) ? '<a ...>' . $m[0] . '</a>'
                                         : $m[0];
}, $text);