我想在帖子中找到提到的用户,并将其保存在表格中。这是输入的所有用户名,这些用户名写在帖子中@符号后,并在表“ 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();
}
答案 0 :(得分:2)
$mentionedUsers[0]
是一个完整匹配项的数组,所有字符串均以@
开头,然后有1个以上的字符字符。用户名是不含@
的部分,并被捕获到组1中。
因此,您需要使用
foreach ($mentionedUsers[1] as $mentionedUser)
^
然后,您将拥有前面没有@
的用户ID。
此外,如果要避免匹配电子邮件,可以在正则表达式中的\B
之前添加@
:
'/\B@(\w+)/'
然后,@
字符只有在没有单词char开头的情况下才会被匹配。