php正则表达式匹配@用户名

需求说明:
将“@小明 你好,@小李 你也好”中的小明,小李提取出来
规则为@用户名 +空格

阅读 5.1k
3 个回答
$users = [
    ['id' => 1, 'name' => '小明'],
    ['id' => 2, 'name' => '小李'],
];

$comment = '@小明 你好,@小李 你也好”中的小明,小李提取出';


$comment = preg_replace_callback('/(@)(.+?)(\s)/', function ($matches) use ($users) {
    foreach ($users as $user) {
        if ($matches[2] === $user['name']) {
            return "<a href='/user/{$user['id']}'>@$matches[2]</a> ";
        }
    }
    return $matches[0];
}, $comment);

var_dump($comment);

// string(111) "<a href='/user/1'>@小明</a> 你好,<a href='/user/2'>@小李</a> 你也好”中的小明,小李提取出"

满意吗?


问题描述里面那个叫“用户名”的家伙有点屌啊。

<?php
if(preg_match_all('%@\w+%u', '@张全蛋 含泪质检@三星Note7 被炸飞,听说@炸机 跟@啤酒 更配哦!', $matches)) {
    var_export($matches);
}
//输出:
array (
  0 => 
  array (
    0 => '@张全蛋',
    1 => '@三星Note7',
    2 => '@炸机',
    3 => '@啤酒',
  ),
)

艾特时选中一个用户 但是这个用户的昵称 在数据库中是多次重复的,这种情况怎么处理?会不会同时所有同名的昵称都会收到消息??

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题