所以,我有一个preg_replace函数,应该替换以下模式:前面带有 @ 字符的用户名。
我已经将用户名放在一个名为 allMembers() 的多维数组中,并用正则表达式替换任何单词,并在其周围添加 @ 字符和空格:
/'B@[a-z-]+'s/
但是,如何通过preg_replace函数运行数组中包含的用户名呢?因此,只需一个替换多个模式。
$mentionPattern = "/'B@[ USERNAMES FROM ARRAY ALLMEMBERS HERE ]+'s/";
$mentionReplace = "<a class='userMention'>$0</a>";
preg_replace($mentionPattern, $mentionReplace, $text);
例:
我网站上的用户: 约翰, 哈利, 彼得
每当有人添加诸如"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);