preg_match_all提及用户@ Laravel

时间:2019-05-06 19:05:55

标签: laravel foreach preg-match mention

我想在帖子中找到提到的用户,并将其保存在表格中。这是输入的所有用户名,这些用户名写在帖子中@符号后,并在表“ User”中找到,并且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();
                }

1 个答案:

答案 0 :(得分:2)

$mentionedUsers[0]是一个完整匹配项的数组,所有字符串均以@开头,然后有1个以上的字符字符。用户名是不含@的部分,并被捕获到组1中。

因此,您需要使用

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

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

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

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

然后,@字符只有在没有单词char开头的情况下才会被匹配。