首页 > 解决方案 > preg_match_all 提到用户@Laravel

问题描述

我想在帖子中找到提到的用户并将其保存在表格中。这里是所有输入的用户名,这些用户名写在@符号后面的帖子中,并在“用户”表中找到,ID 由用户存储。不幸的是,我找不到任何用户,因此找不到用户 ID。如何从用户那里找到 ID?

$msg = I am a post and mention @username1 and @username2

      preg_match_all('/@(\w+)/', $msg, $mentionedUsers);

                foreach ($mentionedUsers[0] as $mentionedUser) {

                        $foundUser = User::find($mentionedUser);
                        if ($foundUser) {
                            $foundUserId = $foundUser->id;
                        }

                    $mentionedUser_save = new Mentioned_post_user;
                    $mentionedUser_save->user_id_lead = Auth::user()->id;
                    $mentionedUser_save->user_id = $foundUserId;
                    $mentionedUser_save->post_id = $post->id;
                    $mentionedUser_save->save();
                }

标签: laravelforeachpreg-matchmention

解决方案


$mentionedUsers[0]是一个完整匹配的数组,字符串以@1+ 字字符开头。用户名是没有的部分@,被捕获到第 1 组中。

因此,您需要使用

foreach ($mentionedUsers[1] as $mentionedUser)
                         ^

@然后,您将拥有前面没有的用户 ID 。

此外,如果您想避免匹配的电子邮件,您可以在正则表达式\B之前添加@

'/\B@(\w+)/'

然后,@只有在前面没有单词 char 的情况下 char 才会被匹配。


推荐阅读