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

时间:2015-02-01 14:57:06

标签: php arrays regex preg-replace

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

我有一个名为allMembers()的多维数组中的用户名和正则表达式,用@ -character替换任何单词并在其周围留出空格:

/\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);

示例:

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

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

1 个答案:

答案 0 :(得分:2)

一个好方法是使用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);